{"id":860,"date":"2026-08-02T12:19:45","date_gmt":"2026-08-02T12:19:45","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=860"},"modified":"2026-08-02T12:39:20","modified_gmt":"2026-08-02T12:39:20","slug":"860-2","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/860-2\/","title":{"rendered":"Game File Checker"},"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>Game File Integrity Checker Pro<\/title>\n    <style>\n        \/* Scoped Container for WordPress \/ Elementor \/ Gutenberg Compatibility *\/\n        #gfic-pro-container {\n            --gfic-bg: #090d16;\n            --gfic-card-bg: #111827;\n            --gfic-card-border: #1f2937;\n            --gfic-card-border-hover: #374151;\n            --gfic-text: #f9fafb;\n            --gfic-text-muted: #9ca3af;\n            --gfic-primary: #3b82f6;\n            --gfic-primary-hover: #2563eb;\n            --gfic-accent: #10b981;\n            --gfic-danger: #ef4444;\n            --gfic-warning: #f59e0b;\n            --gfic-radius: 14px;\n            --gfic-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.3);\n            \n            font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n            background-color: var(--gfic-bg);\n            color: var(--gfic-text);\n            padding: 24px;\n            border-radius: var(--gfic-radius);\n            box-sizing: border-box;\n            width: 100%;\n            max-width: 1400px;\n            margin: 0 auto;\n            position: relative;\n            z-index: 1;\n            transition: background 0.3s ease, color 0.3s ease;\n        }\n\n        #gfic-pro-container.gfic-light-mode {\n            --gfic-bg: #f8fafc;\n            --gfic-card-bg: #ffffff;\n            --gfic-card-border: #e2e8f0;\n            --gfic-card-border-hover: #cbd5e1;\n            --gfic-text: #0f172a;\n            --gfic-text-muted: #64748b;\n            --gfic-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);\n        }\n\n        #gfic-pro-container * {\n            box-sizing: border-box;\n        }\n\n        #gfic-pro-container header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 24px;\n            border-bottom: 1px solid var(--gfic-card-border);\n            padding-bottom: 16px;\n            flex-wrap: wrap;\n            gap: 16px;\n        }\n\n        #gfic-pro-container h1 {\n            font-size: 1.75rem;\n            font-weight: 800;\n            margin: 0;\n            color: var(--gfic-text);\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n\n        #gfic-pro-container .gfic-header-actions {\n            display: flex;\n            gap: 12px;\n            align-items: center;\n            flex-wrap: wrap;\n        }\n\n        #gfic-pro-container select {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            color: var(--gfic-text);\n            padding: 8px 14px;\n            border-radius: 8px;\n            cursor: pointer;\n            font-size: 0.875rem;\n            outline: none;\n            transition: border-color 0.2s;\n        }\n\n        #gfic-pro-container select:focus {\n            border-color: var(--gfic-primary);\n        }\n\n        #gfic-pro-container .gfic-theme-toggle {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            color: var(--gfic-text);\n            padding: 8px 16px;\n            border-radius: 8px;\n            cursor: pointer;\n            font-size: 0.875rem;\n            font-weight: 600;\n            transition: all 0.2s;\n        }\n\n        #gfic-pro-container .gfic-theme-toggle:hover {\n            border-color: var(--gfic-card-border-hover);\n            background: var(--gfic-card-border);\n        }\n\n        \/* Upload Module Styling *\/\n        #gfic-pro-container .gfic-upload-section {\n            background: var(--gfic-card-bg);\n            border: 2px dashed var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            padding: 48px 24px;\n            text-align: center;\n            cursor: pointer;\n            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n            position: relative;\n            margin-bottom: 24px;\n            box-shadow: var(--gfic-shadow);\n        }\n\n        #gfic-pro-container .gfic-upload-section:hover {\n            border-color: var(--gfic-primary);\n        }\n\n        #gfic-pro-container .gfic-upload-section.dragover {\n            border-color: var(--gfic-primary);\n            background: rgba(59, 130, 246, 0.08);\n            transform: scale(1.01);\n        }\n\n        #gfic-pro-container .gfic-upload-icon {\n            font-size: 56px;\n            margin-bottom: 16px;\n            color: var(--gfic-primary);\n        }\n\n        #gfic-pro-container .gfic-upload-title {\n            font-size: 1.25rem;\n            font-weight: 700;\n            margin-bottom: 8px;\n        }\n\n        #gfic-pro-container .gfic-upload-subtitle {\n            font-size: 0.938rem;\n            color: var(--gfic-text-muted);\n            margin-bottom: 24px;\n        }\n\n        #gfic-pro-container .gfic-btn-group {\n            display: flex;\n            gap: 12px;\n            justify-content: center;\n            flex-wrap: wrap;\n        }\n\n        #gfic-pro-container .gfic-btn {\n            background: var(--gfic-primary);\n            color: white;\n            border: none;\n            padding: 10px 20px;\n            border-radius: 8px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: background 0.2s, transform 0.1s;\n            font-size: 0.875rem;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n        }\n\n        #gfic-pro-container .gfic-btn:hover {\n            background: var(--gfic-primary-hover);\n        }\n\n        #gfic-pro-container .gfic-btn:active {\n            transform: scale(0.98);\n        }\n\n        #gfic-pro-container .gfic-btn-secondary {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            color: var(--gfic-text);\n            box-shadow: none;\n        }\n\n        #gfic-pro-container .gfic-btn-secondary:hover {\n            background: var(--gfic-card-border);\n            border-color: var(--gfic-card-border-hover);\n        }\n\n        #gfic-pro-container .gfic-btn-danger {\n            background: var(--gfic-danger);\n        }\n        #gfic-pro-container .gfic-btn-danger:hover {\n            background: #dc2626;\n        }\n\n        \/* Hidden File Inputs *\/\n        #gfic-pro-container input[type=\"file\"] {\n            display: none;\n        }\n\n        \/* Dashboard Grid *\/\n        #gfic-pro-container .gfic-dashboard {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n            gap: 16px;\n            margin-bottom: 24px;\n        }\n\n        #gfic-pro-container .gfic-card {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            padding: 20px;\n            box-shadow: var(--gfic-shadow);\n        }\n\n        #gfic-pro-container .gfic-card-title {\n            font-size: 0.813rem;\n            color: var(--gfic-text-muted);\n            margin-bottom: 8px;\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n            font-weight: 700;\n        }\n\n        #gfic-pro-container .gfic-card-value {\n            font-size: 1.75rem;\n            font-weight: 800;\n        }\n\n        \/* Progress Bar *\/\n        #gfic-pro-container .gfic-progress-wrapper {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            padding: 16px 20px;\n            margin-bottom: 24px;\n            box-shadow: var(--gfic-shadow);\n        }\n\n        #gfic-pro-container .gfic-progress-info {\n            display: flex;\n            justify-content: space-between;\n            font-size: 0.875rem;\n            font-weight: 600;\n            margin-bottom: 8px;\n        }\n\n        #gfic-pro-container .gfic-progress-bar-bg {\n            width: 100%;\n            height: 8px;\n            background: var(--gfic-card-border);\n            border-radius: 4px;\n            overflow: hidden;\n        }\n\n        #gfic-pro-container .gfic-progress-bar-fill {\n            height: 100%;\n            background: var(--gfic-primary);\n            width: 0%;\n            transition: width 0.2s ease;\n        }\n\n        \/* Control \/ Toolbar Section *\/\n        #gfic-pro-container .gfic-toolbar {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            padding: 16px 20px;\n            margin-bottom: 24px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 16px;\n            box-shadow: var(--gfic-shadow);\n        }\n\n        #gfic-pro-container .gfic-search-input {\n            background: var(--gfic-bg);\n            border: 1px solid var(--gfic-card-border);\n            color: var(--gfic-text);\n            padding: 8px 14px;\n            border-radius: 8px;\n            font-size: 0.875rem;\n            outline: none;\n            width: 250px;\n            transition: border-color 0.2s;\n        }\n\n        #gfic-pro-container .gfic-search-input:focus {\n            border-color: var(--gfic-primary);\n        }\n\n        #gfic-pro-container .gfic-filters {\n            display: flex;\n            gap: 12px;\n            align-items: center;\n            flex-wrap: wrap;\n        }\n\n        \/* File List Table *\/\n        #gfic-pro-container .gfic-table-container {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            overflow-x: auto;\n            margin-bottom: 24px;\n            box-shadow: var(--gfic-shadow);\n        }\n\n        #gfic-pro-container table {\n            width: 100%;\n            border-collapse: collapse;\n            text-align: left;\n            font-size: 0.875rem;\n            white-space: nowrap;\n        }\n\n        #gfic-pro-container th, #gfic-pro-container td {\n            padding: 14px 18px;\n            border-bottom: 1px solid var(--gfic-card-border);\n        }\n\n        #gfic-pro-container th {\n            background: rgba(0, 0, 0, 0.15);\n            font-weight: 700;\n            color: var(--gfic-text-muted);\n            cursor: pointer;\n            user-select: none;\n        }\n\n        #gfic-pro-container th:hover {\n            color: var(--gfic-text);\n        }\n\n        #gfic-pro-container tr:last-child td {\n            border-bottom: none;\n        }\n\n        #gfic-pro-container tr:hover td {\n            background: rgba(59, 130, 246, 0.02);\n        }\n\n        #gfic-pro-container .gfic-status-badge {\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            padding: 4px 10px;\n            border-radius: 6px;\n            font-size: 0.75rem;\n            font-weight: 700;\n        }\n\n        #gfic-pro-container .gfic-status-success {\n            background: rgba(16, 185, 129, 0.15);\n            color: var(--gfic-accent);\n        }\n\n        #gfic-pro-container .gfic-status-error {\n            background: rgba(239, 68, 68, 0.15);\n            color: var(--gfic-danger);\n        }\n\n        #gfic-pro-container .gfic-status-processing {\n            background: rgba(245, 158, 11, 0.15);\n            color: var(--gfic-warning);\n        }\n\n        \/* Actions Bar & Export Footer *\/\n        #gfic-pro-container .gfic-actions-bar {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            padding: 20px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 16px;\n            box-shadow: var(--gfic-shadow);\n            margin-bottom: 24px;\n        }\n\n        #gfic-pro-container .gfic-export-group {\n            display: flex;\n            gap: 10px;\n            flex-wrap: wrap;\n        }\n\n        \/* Modal Overlay *\/\n        #gfic-pro-container .gfic-modal-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.7);\n            backdrop-filter: blur(4px);\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            z-index: 99999;\n            padding: 20px;\n        }\n\n        #gfic-pro-container .gfic-modal {\n            background: var(--gfic-card-bg);\n            border: 1px solid var(--gfic-card-border);\n            border-radius: var(--gfic-radius);\n            width: 100%;\n            max-width: 600px;\n            padding: 24px;\n            box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n            position: relative;\n        }\n\n        #gfic-pro-container .gfic-modal h3 {\n            margin-top: 0;\n            margin-bottom: 16px;\n            font-size: 1.25rem;\n        }\n\n        #gfic-pro-container .gfic-modal-close {\n            position: absolute;\n            top: 20px;\n            right: 20px;\n            background: none;\n            border: none;\n            color: var(--gfic-text-muted);\n            font-size: 1.25rem;\n            cursor: pointer;\n        }\n\n        #gfic-pro-container .gfic-modal-close:hover {\n            color: var(--gfic-text);\n        }\n\n        #gfic-pro-container .gfic-form-group {\n            margin-bottom: 16px;\n        }\n\n        #gfic-pro-container .gfic-form-group label {\n            display: block;\n            font-size: 0.813rem;\n            font-weight: 700;\n            color: var(--gfic-text-muted);\n            margin-bottom: 6px;\n            text-transform: uppercase;\n        }\n\n        #gfic-pro-container .gfic-form-control {\n            width: 100%;\n            background: var(--gfic-bg);\n            border: 1px solid var(--gfic-card-border);\n            color: var(--gfic-text);\n            padding: 10px 14px;\n            border-radius: 8px;\n            font-size: 0.875rem;\n            outline: none;\n        }\n\n        #gfic-pro-container .gfic-form-control:focus {\n            border-color: var(--gfic-primary);\n        }\n\n        #gfic-pro-container .gfic-hidden {\n            display: none !important;\n        }\n\n        @media (max-width: 768px) {\n            #gfic-pro-container {\n                padding: 12px;\n            }\n            #gfic-pro-container header {\n                flex-direction: column;\n                align-items: stretch;\n            }\n            #gfic-pro-container .gfic-header-actions {\n                justify-content: space-between;\n            }\n            #gfic-pro-container .gfic-toolbar {\n                flex-direction: column;\n                align-items: stretch;\n            }\n            #gfic-pro-container .gfic-search-input {\n                width: 100%;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n\n    <div id=\"gfic-pro-container\">\n        <header>\n            <h1>\ud83d\udee1\ufe0f Game File Integrity Checker Pro<\/h1>\n            <div class=\"gfic-header-actions\">\n                <select id=\"gfic-algo-select\" title=\"Select Hashing Algorithm\">\n                    <option value=\"SHA-256\" selected>SHA-256 (Recommended)<\/option>\n                    <option value=\"SHA-384\">SHA-384<\/option>\n                    <option value=\"SHA-512\">SHA-512<\/option>\n                    <option value=\"SHA-1\">SHA-1 (Legacy)<\/option>\n                <\/select>\n                <button type=\"button\" class=\"gfic-theme-toggle\" id=\"gfic-theme-toggle\">\ud83c\udf13 Theme<\/button>\n            <\/div>\n        <\/header>\n\n        <!-- Professional Upload Module -->\n        <div class=\"gfic-upload-section\" id=\"gfic-drop-zone\">\n            <div class=\"gfic-upload-icon\">\ud83d\udcc1<\/div>\n            <div class=\"gfic-upload-title\">Drag &#038; Drop Game Files or Folders Here<\/div>\n            <div class=\"gfic-upload-subtitle\">Supports single files, multiple files, and full game directories (webkitdirectory)<\/div>\n            <div class=\"gfic-btn-group\">\n                <button type=\"button\" class=\"gfic-btn\" id=\"gfic-browse-files-btn\">\ud83d\udcc2 Browse Files<\/button>\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-browse-folder-btn\">\ud83d\udcc1 Browse Folder<\/button>\n            <\/div>\n            <!-- Hidden File & Folder Inputs -->\n            <input type=\"file\" id=\"gfic-file-input\" multiple>\n            <input type=\"file\" id=\"gfic-folder-input\" webkitdirectory directory multiple>\n        <\/div>\n\n        <!-- Progress Bar Section -->\n        <div class=\"gfic-progress-wrapper gfic-hidden\" id=\"gfic-progress-wrapper\">\n            <div class=\"gfic-progress-info\">\n                <span id=\"gfic-progress-text\">Processing files&#8230;<\/span>\n                <span id=\"gfic-progress-percent\">0%<\/span>\n            <\/div>\n            <div class=\"gfic-progress-bar-bg\">\n                <div class=\"gfic-progress-bar-fill\" id=\"gfic-progress-fill\"><\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Dashboard Metrics -->\n        <div class=\"gfic-dashboard\">\n            <div class=\"gfic-card\">\n                <div class=\"gfic-card-title\">Total Files<\/div>\n                <div class=\"gfic-card-value\" id=\"gfic-stat-total\">0<\/div>\n            <\/div>\n            <div class=\"gfic-card\">\n                <div class=\"gfic-card-title\">Total Size<\/div>\n                <div class=\"gfic-card-value\" id=\"gfic-stat-size\">0 KB<\/div>\n            <\/div>\n            <div class=\"gfic-card\">\n                <div class=\"gfic-card-title\">Processed<\/div>\n                <div class=\"gfic-card-value\" id=\"gfic-stat-processed\">0<\/div>\n            <\/div>\n            <div class=\"gfic-card\">\n                <div class=\"gfic-card-title\">Verified<\/div>\n                <div class=\"gfic-card-value\" id=\"gfic-stat-verified\" style=\"color: var(--gfic-accent);\">0<\/div>\n            <\/div>\n            <div class=\"gfic-card\">\n                <div class=\"gfic-card-title\">Failed \/ Modified<\/div>\n                <div class=\"gfic-card-value\" id=\"gfic-stat-failed\" style=\"color: var(--gfic-danger);\">0<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Toolbar \/ Search & Filter -->\n        <div class=\"gfic-toolbar gfic-hidden\" id=\"gfic-toolbar\">\n            <input type=\"text\" class=\"gfic-search-input\" id=\"gfic-search-input\" placeholder=\"Search files...\">\n            <div class=\"gfic-filters\">\n                <select id=\"gfic-status-filter\">\n                    <option value=\"all\">All Statuses<\/option>\n                    <option value=\"success\">Verified<\/option>\n                    <option value=\"error\">Failed \/ Modified<\/option>\n                    <option value=\"processing\">Processing<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- File Management Table -->\n        <div class=\"gfic-table-container gfic-hidden\" id=\"gfic-table-container\">\n            <table>\n                <thead>\n                    <tr>\n                        <th data-sort=\"name\">File Name \u2195<\/th>\n                        <th data-sort=\"path\">Path \u2195<\/th>\n                        <th data-sort=\"size\">Size \u2195<\/th>\n                        <th data-sort=\"hash\">Hash \u2195<\/th>\n                        <th data-sort=\"algo\">Algorithm \u2195<\/th>\n                        <th data-sort=\"status\">Status \u2195<\/th>\n                        <th>Actions<\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody id=\"gfic-table-body\">\n                    <!-- Dynamic Rows -->\n                <\/tbody>\n            <\/table>\n        <\/div>\n\n        <!-- Export & Action Footer -->\n        <div class=\"gfic-actions-bar gfic-hidden\" id=\"gfic-actions-bar\">\n            <div class=\"gfic-export-group\">\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-export-txt\">\ud83d\udcc4 Export TXT<\/button>\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-export-csv\">\ud83d\udcca Export CSV<\/button>\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-export-json\">\ud83d\udce6 Export JSON<\/button>\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-export-html\">\ud83c\udf10 Export HTML<\/button>\n                <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-print-report\">\ud83d\udda8\ufe0f Print Report<\/button>\n            <\/div>\n            <button type=\"button\" class=\"gfic-btn gfic-btn-danger\" id=\"gfic-clear-all\">\ud83d\uddd1\ufe0f Clear All<\/button>\n        <\/div>\n\n        <!-- Verify Modal (Dynamic) -->\n        <div class=\"gfic-modal-overlay gfic-hidden\" id=\"gfic-verify-modal\">\n            <div class=\"gfic-modal\">\n                <button type=\"button\" class=\"gfic-modal-close\" id=\"gfic-modal-close\">\u00d7<\/button>\n                <h3>Verify File Integrity<\/h3>\n                <div class=\"gfic-form-group\">\n                    <label>File Name<\/label>\n                    <input type=\"text\" class=\"gfic-form-control\" id=\"gfic-modal-filename\" readonly>\n                <\/div>\n                <div class=\"gfic-form-group\">\n                    <label>Calculated Hash (<span id=\"gfic-modal-algo\">SHA-256<\/span>)<\/label>\n                    <input type=\"text\" class=\"gfic-form-control\" id=\"gfic-modal-calc-hash\" readonly style=\"font-family: monospace; font-size: 0.75rem;\">\n                <\/div>\n                <div class=\"gfic-form-group\">\n                    <label>Expected \/ Official Hash<\/label>\n                    <input type=\"text\" class=\"gfic-form-control\" id=\"gfic-modal-expected-hash\" placeholder=\"Paste expected hash here...\" style=\"font-family: monospace; font-size: 0.75rem;\">\n                <\/div>\n                <div id=\"gfic-modal-result\" class=\"gfic-hidden\" style=\"margin-bottom: 16px; padding: 12px; border-radius: 8px; font-weight: 700; text-align: center;\"><\/div>\n                <div style=\"display: flex; justify-content: flex-end; gap: 10px;\">\n                    <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" id=\"gfic-modal-cancel\">Close<\/button>\n                    <button type=\"button\" class=\"gfic-btn\" id=\"gfic-modal-verify-btn\">Verify Integrity<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        (function() {\n            'use strict';\n\n            document.addEventListener('DOMContentLoaded', function() {\n                const container = document.getElementById('gfic-pro-container');\n                if (!container) return;\n\n                \/\/ DOM Elements\n                const dropZone = document.getElementById('gfic-drop-zone');\n                const fileInput = document.getElementById('gfic-file-input');\n                const folderInput = document.getElementById('gfic-folder-input');\n                const browseFilesBtn = document.getElementById('gfic-browse-files-btn');\n                const browseFolderBtn = document.getElementById('gfic-browse-folder-btn');\n                const algoSelect = document.getElementById('gfic-algo-select');\n                const themeToggleBtn = document.getElementById('gfic-theme-toggle');\n\n                const progressWrapper = document.getElementById('gfic-progress-wrapper');\n                const progressText = document.getElementById('gfic-progress-text');\n                const progressPercent = document.getElementById('gfic-progress-percent');\n                const progressFill = document.getElementById('gfic-progress-fill');\n\n                const statTotal = document.getElementById('gfic-stat-total');\n                const statSize = document.getElementById('gfic-stat-size');\n                const statProcessed = document.getElementById('gfic-stat-processed');\n                const statVerified = document.getElementById('gfic-stat-verified');\n                const statFailed = document.getElementById('gfic-stat-failed');\n\n                const toolbar = document.getElementById('gfic-toolbar');\n                const searchInput = document.getElementById('gfic-search-input');\n                const statusFilter = document.getElementById('gfic-status-filter');\n\n                const tableContainer = document.getElementById('gfic-table-container');\n                const tableBody = document.getElementById('gfic-table-body');\n                const actionsBar = document.getElementById('gfic-actions-bar');\n                const clearAllBtn = document.getElementById('gfic-clear-all');\n\n                const exportTxtBtn = document.getElementById('gfic-export-txt');\n                const exportCsvBtn = document.getElementById('gfic-export-csv');\n                const exportJsonBtn = document.getElementById('gfic-export-json');\n                const exportHtmlBtn = document.getElementById('gfic-export-html');\n                const printReportBtn = document.getElementById('gfic-print-report');\n\n                \/\/ Modal Elements\n                const verifyModal = document.getElementById('gfic-verify-modal');\n                const modalClose = document.getElementById('gfic-modal-close');\n                const modalCancel = document.getElementById('gfic-modal-cancel');\n                const modalFilename = document.getElementById('gfic-modal-filename');\n                const modalAlgo = document.getElementById('gfic-modal-algo');\n                const modalCalcHash = document.getElementById('gfic-modal-calc-hash');\n                const modalExpectedHash = document.getElementById('gfic-modal-expected-hash');\n                const modalResult = document.getElementById('gfic-modal-result');\n                const modalVerifyBtn = document.getElementById('gfic-modal-verify-btn');\n\n                let loadedFiles = [];\n                let currentSortColumn = 'name';\n                let sortAscending = true;\n                let activeModalFileId = null;\n\n                \/\/ Theme Toggle\n                themeToggleBtn.addEventListener('click', function() {\n                    container.classList.toggle('gfic-light-mode');\n                });\n\n                \/\/ Upload System Event Listeners\n                dropZone.addEventListener('click', function(e) {\n                    if (e.target.closest('button')) return;\n                    fileInput.click();\n                });\n\n                browseFilesBtn.addEventListener('click', function(e) {\n                    e.stopPropagation();\n                    fileInput.click();\n                });\n\n                browseFolderBtn.addEventListener('click', function(e) {\n                    e.stopPropagation();\n                    folderInput.click();\n                });\n\n                fileInput.addEventListener('change', function(e) {\n                    handleFiles(e.target.files);\n                    fileInput.value = '';\n                });\n\n                folderInput.addEventListener('change', function(e) {\n                    handleFiles(e.target.files);\n                    folderInput.value = '';\n                });\n\n                \/\/ Drag & Drop\n                ['dragenter', 'dragover'].forEach(eventName => {\n                    dropZone.addEventListener(eventName, function(e) {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        dropZone.classList.add('dragover');\n                    }, false);\n                });\n\n                ['dragleave', 'drop'].forEach(eventName => {\n                    dropZone.addEventListener(eventName, function(e) {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        dropZone.classList.remove('dragover');\n                    }, false);\n                });\n\n                dropZone.addEventListener('drop', function(e) {\n                    const dt = e.dataTransfer;\n                    if (dt && dt.files) {\n                        handleFiles(dt.files);\n                    }\n                });\n\n                \/\/ File Handling & Duplicate Prevention\n                function handleFiles(fileList) {\n                    if (!fileList || fileList.length === 0) return;\n\n                    let addedCount = 0;\n                    Array.from(fileList).forEach(file => {\n                        const path = file.webkitRelativePath || file.name;\n                        const exists = loadedFiles.some(f => f.name === file.name && f.size === file.size && f.path === path);\n                        if (!exists) {\n                            loadedFiles.push({\n                                id: 'file_' + Math.random().toString(36).substr(2, 9),\n                                file: file,\n                                name: file.name,\n                                path: path,\n                                size: file.size,\n                                hash: 'Pending...',\n                                algo: algoSelect.value,\n                                status: 'processing',\n                                expectedHash: '',\n                                verified: false\n                            });\n                            addedCount++;\n                        }\n                    });\n\n                    if (addedCount > 0) {\n                        updateUI();\n                        processQueue();\n                    }\n                }\n\n                \/\/ Hashing Engine using Web Crypto API\n                async function processQueue() {\n                    const processingFiles = loadedFiles.filter(f => f.status === 'processing');\n                    if (processingFiles.length === 0) return;\n\n                    progressWrapper.classList.remove('gfic-hidden');\n                    let processedTotal = loadedFiles.length - processingFiles.length;\n\n                    for (let item of processingFiles) {\n                        progressText.textContent = `Hashing: ${item.name}`;\n                        const percent = Math.round((processedTotal \/ loadedFiles.length) * 100);\n                        progressPercent.textContent = percent + '%';\n                        progressFill.style.width = percent + '%';\n\n                        try {\n                            const buffer = await item.file.arrayBuffer();\n                            const hashBuffer = await crypto.subtle.digest(item.algo, buffer);\n                            const hashArray = Array.from(new Uint8Array(hashBuffer));\n                            const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n                            \n                            item.hash = hashHex;\n                            item.status = 'success';\n                        } catch (err) {\n                            item.hash = 'Error computing hash';\n                            item.status = 'error';\n                        }\n\n                        processedTotal++;\n                        updateUI();\n                    }\n\n                    progressPercent.textContent = '100%';\n                    progressFill.style.width = '100%';\n                    setTimeout(() => {\n                        progressWrapper.classList.add('gfic-hidden');\n                    }, 800);\n                }\n\n                \/\/ Format Bytes Helper\n                function formatBytes(bytes) {\n                    if (bytes === 0) return '0 Bytes';\n                    const k = 1024;\n                    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n                    const i = Math.floor(Math.log(bytes) \/ Math.log(k));\n                    return parseFloat((bytes \/ Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n                }\n\n                \/\/ UI Refresh & Calculations\n                function updateUI() {\n                    const totalFiles = loadedFiles.length;\n                    const totalBytes = loadedFiles.reduce((acc, f) => acc + f.size, 0);\n                    const processedCount = loadedFiles.filter(f => f.status !== 'processing').length;\n                    const verifiedCount = loadedFiles.filter(f => f.verified === true).length;\n                    const failedCount = loadedFiles.filter(f => f.status === 'error' || (f.expectedHash && f.verified === false)).length;\n\n                    statTotal.textContent = totalFiles;\n                    statSize.textContent = formatBytes(totalBytes);\n                    statProcessed.textContent = processedCount;\n                    statVerified.textContent = verifiedCount;\n                    statFailed.textContent = failedCount;\n\n                    if (totalFiles > 0) {\n                        toolbar.classList.remove('gfic-hidden');\n                        tableContainer.classList.remove('gfic-hidden');\n                        actionsBar.classList.remove('gfic-hidden');\n                    } else {\n                        toolbar.classList.add('gfic-hidden');\n                        tableContainer.classList.add('gfic-hidden');\n                        actionsBar.classList.add('gfic-hidden');\n                    }\n\n                    renderTable();\n                }\n\n                \/\/ Render Table with Filtering & Sorting\n                function renderTable() {\n                    const searchTerm = searchInput.value.toLowerCase();\n                    const statusFilterVal = statusFilter.value;\n\n                    let filtered = loadedFiles.filter(item => {\n                        const matchesSearch = item.name.toLowerCase().includes(searchTerm) || item.path.toLowerCase().includes(searchTerm) || item.hash.toLowerCase().includes(searchTerm);\n                        let matchesStatus = true;\n                        if (statusFilterVal === 'success') matchesStatus = item.status === 'success';\n                        if (statusFilterVal === 'error') matchesStatus = item.status === 'error' || item.verified === false;\n                        if (statusFilterVal === 'processing') matchesStatus = item.status === 'processing';\n                        return matchesSearch && matchesStatus;\n                    });\n\n                    \/\/ Sorting\n                    filtered.sort((a, b) => {\n                        let valA = a[currentSortColumn];\n                        let valB = b[currentSortColumn];\n                        if (typeof valA === 'string') {\n                            valA = valA.toLowerCase();\n                            valB = valB.toLowerCase();\n                        }\n                        if (valA < valB) return sortAscending ? -1 : 1;\n                        if (valA > valB) return sortAscending ? 1 : -1;\n                        return 0;\n                    });\n\n                    tableBody.innerHTML = '';\n                    filtered.forEach(item => {\n                        const tr = document.createElement('tr');\n                        \n                        let badgeHtml = '';\n                        if (item.status === 'processing') {\n                            badgeHtml = '<span class=\"gfic-status-badge gfic-status-processing\">\u23f3 Processing<\/span>';\n                        } else if (item.status === 'error') {\n                            badgeHtml = '<span class=\"gfic-status-badge gfic-status-error\">\u274c Error<\/span>';\n                        } else if (item.expectedHash && item.verified) {\n                            badgeHtml = '<span class=\"gfic-status-badge gfic-status-success\">\u2705 Verified<\/span>';\n                        } else if (item.expectedHash && !item.verified) {\n                            badgeHtml = '<span class=\"gfic-status-badge gfic-status-error\">\u274c Modified<\/span>';\n                        } else {\n                            badgeHtml = '<span class=\"gfic-status-badge gfic-status-success\">\u2714\ufe0f Ready<\/span>';\n                        }\n\n                        tr.innerHTML = `\n                            <td><strong>${escapeHtml(item.name)}<\/strong><\/td>\n                            <td style=\"color:var(--gfic-text-muted);\">${escapeHtml(item.path)}<\/td>\n                            <td>${formatBytes(item.size)}<\/td>\n                            <td style=\"font-family:monospace; font-size:0.75rem;\" title=\"${escapeHtml(item.hash)}\">${escapeHtml(item.hash.substring(0, 16))}...<\/td>\n                            <td>${escapeHtml(item.algo)}<\/td>\n                            <td>${badgeHtml}<\/td>\n                            <td>\n                                <div style=\"display: flex; gap: 6px;\">\n                                    <button type=\"button\" class=\"gfic-btn\" style=\"padding: 4px 8px; font-size: 0.75rem;\" data-action=\"verify\" data-id=\"${item.id}\">Verify<\/button>\n                                    <button type=\"button\" class=\"gfic-btn gfic-btn-secondary\" style=\"padding: 4px 8px; font-size: 0.75rem;\" data-action=\"copy\" data-id=\"${item.id}\">Copy<\/button>\n                                    <button type=\"button\" class=\"gfic-btn gfic-btn-danger\" style=\"padding: 4px 8px; font-size: 0.75rem;\" data-action=\"remove\" data-id=\"${item.id}\">X<\/button>\n                                <\/div>\n                            <\/td>\n                        `;\n                        tableBody.appendChild(tr);\n                    });\n                }\n\n                \/\/ Table Actions Listener (Event Delegation)\n                tableBody.addEventListener('click', function(e) {\n                    const btn = e.target.closest('button');\n                    if (!btn) return;\n                    const action = btn.getAttribute('data-action');\n                    const id = btn.getAttribute('data-id');\n                    const item = loadedFiles.find(f => f.id === id);\n                    if (!item) return;\n\n                    if (action === 'remove') {\n                        loadedFiles = loadedFiles.filter(f => f.id !== id);\n                        updateUI();\n                    } else if (action === 'copy') {\n                        navigator.clipboard.writeText(item.hash).then(() => {\n                            btn.textContent = 'Copied!';\n                            setTimeout(() => { btn.textContent = 'Copy'; }, 1500);\n                        });\n                    } else if (action === 'verify') {\n                        openVerifyModal(item);\n                    }\n                });\n\n                \/\/ Sorting Headers\n                document.querySelectorAll('#gfic-pro-container th[data-sort]').forEach(th => {\n                    th.addEventListener('click', function() {\n                        const col = this.getAttribute('data-sort');\n                        if (currentSortColumn === col) {\n                            sortAscending = !sortAscending;\n                        } else {\n                            currentSortColumn = col;\n                            sortAscending = true;\n                        }\n                        renderTable();\n                    });\n                });\n\n                \/\/ Search & Filter Listeners\n                searchInput.addEventListener('input', renderTable);\n                statusFilter.addEventListener('change', renderTable);\n\n                \/\/ Clear All\n                clearAllBtn.addEventListener('click', function() {\n                    if (confirm('Are you sure you want to clear all loaded files?')) {\n                        loadedFiles = [];\n                        updateUI();\n                    }\n                });\n\n                \/\/ Modal Logic\n                function openVerifyModal(item) {\n                    activeModalFileId = item.id;\n                    modalFilename.value = item.name;\n                    modalAlgo.textContent = item.algo;\n                    modalCalcHash.value = item.hash;\n                    modalExpectedHash.value = item.expectedHash || '';\n                    modalResult.classList.add('gfic-hidden');\n                    verifyModal.classList.remove('gfic-hidden');\n                }\n\n                function closeVerifyModal() {\n                    verifyModal.classList.add('gfic-hidden');\n                    activeModalFileId = null;\n                }\n\n                modalClose.addEventListener('click', closeVerifyModal);\n                modalCancel.addEventListener('click', closeVerifyModal);\n\n                modalVerifyBtn.addEventListener('click', function() {\n                    const item = loadedFiles.find(f => f.id === activeModalFileId);\n                    if (!item) return;\n                    const expected = modalExpectedHash.value.trim().toLowerCase();\n                    item.expectedHash = expected;\n                    \n                    if (!expected) {\n                        modalResult.textContent = 'Please enter an expected hash.';\n                        modalResult.style.background = 'rgba(245, 158, 11, 0.2)';\n                        modalResult.style.color = 'var(--gfic-warning)';\n                        modalResult.classList.remove('gfic-hidden');\n                        return;\n                    }\n\n                    if (item.hash.toLowerCase() === expected) {\n                        item.verified = true;\n                        modalResult.textContent = 'SUCCESS: File is Verified (Matches Expected Hash)';\n                        modalResult.style.background = 'rgba(16, 185, 129, 0.2)';\n                        modalResult.style.color = 'var(--gfic-accent)';\n                        modalResult.classList.remove('gfic-hidden');\n                    } else {\n                        item.verified = false;\n                        modalResult.textContent = 'FAILED: File Modified or Hash Mismatch!';\n                        modalResult.style.background = 'rgba(239, 68, 68, 0.2)';\n                        modalResult.style.color = 'var(--gfic-danger)';\n                        modalResult.classList.remove('gfic-hidden');\n                    }\n                    updateUI();\n                });\n\n                \/\/ Export System\n                function generateReportData() {\n                    const date = new Date().toISOString();\n                    const totalFiles = loadedFiles.length;\n                    const totalSize = formatBytes(loadedFiles.reduce((acc, f) => acc + f.size, 0));\n                    const verifiedCount = loadedFiles.filter(f => f.verified === true).length;\n                    const failedCount = loadedFiles.filter(f => f.status === 'error' || (f.expectedHash && !f.verified)).length;\n\n                    return { date, totalFiles, totalSize, verifiedCount, failedCount, files: loadedFiles };\n                }\n\n                exportTxtBtn.addEventListener('click', function() {\n                    const data = generateReportData();\n                    let text = `GAME FILE INTEGRITY CHECKER PRO - REPORT\\nGenerated: ${data.date}\\nTotal Files: ${data.totalFiles} (${data.totalSize})\\nVerified: ${data.verifiedCount} | Failed: ${data.failedCount}\\n==================================================\\n\\n`;\n                    data.files.forEach(f => {\n                        text += `File: ${f.name}\\nPath: ${f.path}\\nSize: ${formatBytes(f.size)}\\nAlgorithm: ${f.algo}\\nHash: ${f.hash}\\nStatus: ${f.status} ${f.expectedHash ? (f.verified ? '(Verified)' : '(Mismatch)') : ''}\\n--------------------------------------------------\\n`;\n                    });\n                    downloadBlob(new Blob([text], { type: 'text\/plain;charset=utf-8' }), 'integrity-report.txt');\n                });\n\n                exportCsvBtn.addEventListener('click', function() {\n                    const data = generateReportData();\n                    let csv = 'File Name,Path,Size (Bytes),Algorithm,Hash,Status\\n';\n                    data.files.forEach(f => {\n                        csv += `\"${f.name}\",\"${f.path}\",${f.size},\"${f.algo}\",\"${f.hash}\",\"${f.status}\"\\n`;\n                    });\n                    downloadBlob(new Blob([csv], { type: 'text\/csv;charset=utf-8' }), 'integrity-report.csv');\n                });\n\n                exportJsonBtn.addEventListener('click', function() {\n                    const data = generateReportData();\n                    const json = JSON.stringify(data, null, 2);\n                    downloadBlob(new Blob([json], { type: 'application\/json;charset=utf-8' }), 'integrity-report.json');\n                });\n\n                exportHtmlBtn.addEventListener('click', function() {\n                    const data = generateReportData();\n                    let html = `<!DOCTYPE html><html><head><title>Integrity Report<\/title><style>body{font-family:sans-serif;padding:20px;background:#f8fafc;color:#0f172a;}table{width:100%;border-collapse:collapse;margin-top:20px;}th,td{padding:10px;border:1px solid #cbd5e1;text-align:left;font-size:14px;}th{background:#e2e8f0;}<\/style><\/head><body>`;\n                    html += `<h1>Game File Integrity Report<\/h1><p>Generated: ${data.date}<\/p><p>Total Files: ${data.totalFiles} (${data.totalSize})<\/p>`;\n                    html += `<table><tr><th>Name<\/th><th>Path<\/th><th>Size<\/th><th>Algorithm<\/th><th>Hash<\/th><th>Status<\/th><\/tr>`;\n                    data.files.forEach(f => {\n                        html += `<tr><td>${f.name}<\/td><td>${f.path}<\/td><td>${f.size}<\/td><td>${f.algo}<\/td><td style=\"font-family:monospace;\">${f.hash}<\/td><td>${f.status}<\/td><\/tr>`;\n                    });\n                    html += `<\/table><\/body><\/html>`;\n                    downloadBlob(new Blob([html], { type: 'text\/html;charset=utf-8' }), 'integrity-report.html');\n                });\n\n                printReportBtn.addEventListener('click', function() {\n                    window.print();\n                });\n\n                function downloadBlob(blob, filename) {\n                    const url = URL.createObjectURL(blob);\n                    const a = document.createElement('a');\n                    a.href = url;\n                    a.download = filename;\n                    document.body.appendChild(a);\n                    a.click();\n                    document.body.removeChild(a);\n                    URL.revokeObjectURL(url);\n                }\n\n                function escapeHtml(str) {\n                    return String(str).replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\").replace(\/\"\/g, \"&quot;\").replace(\/'\/g, \"&#039;\");\n                }\n            });\n        })();\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Game File Integrity Checker Pro \ud83d\udee1\ufe0f Game File Integrity Checker Pro SHA-256 (Recommended)SHA-384SHA-512SHA-1 (Legacy) \ud83c\udf13 Theme \ud83d\udcc1 Drag &#038; Drop Game Files or Folders Here Supports single files, multiple files, and full game directories (webkitdirectory) \ud83d\udcc2 Browse Files \ud83d\udcc1 Browse Folder Processing files&#8230; 0% Total Files 0 Total Size 0 KB Processed 0 Verified 0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-860","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=860"}],"version-history":[{"count":5,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/860\/revisions"}],"predecessor-version":[{"id":866,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/860\/revisions\/866"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}