{"id":815,"date":"2026-07-31T18:17:49","date_gmt":"2026-07-31T18:17:49","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=815"},"modified":"2026-07-31T18:21:08","modified_gmt":"2026-07-31T18:21:08","slug":"815-2","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/815-2\/","title":{"rendered":"Student Management"},"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>Enterprise Student Information System (SIS) \u2013 Complete Master Edition<\/title>\n<style>\n\/* ==========================================================================\n   WORDPRESS COMPATIBILITY WRAPPER & SCOPING\n   ========================================================================== *\/\n#sis-enterprise-root {\n    all: initial;\n    font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n    color: #1e293b;\n    background-color: #f8fafc;\n    display: block;\n    width: 100%;\n    min-height: 100vh;\n    box-sizing: border-box;\n    position: relative;\n    font-size: 14px;\n    line-height: 1.5;\n    -webkit-font-smoothing: antialiased;\n}\n\n#sis-enterprise-root *, \n#sis-enterprise-root *::before, \n#sis-enterprise-root *::after {\n    box-sizing: border-box;\n}\n\n\/* ==========================================================================\n   CSS DESIGN SYSTEM & VARIABLES\n   ========================================================================== *\/\n#sis-enterprise-root {\n    --sis-primary: #2563eb;\n    --sis-primary-hover: #1d4ed8;\n    --sis-primary-light: #eff6ff;\n    --sis-secondary: #64748b;\n    --sis-success: #16a34a;\n    --sis-warning: #d97706;\n    --sis-danger: #dc2626;\n    --sis-bg: #f8fafc;\n    --sis-card-bg: #ffffff;\n    --sis-border: #cbd5e1;\n    --sis-text: #1e293b;\n    --sis-text-muted: #64748b;\n    --sis-sidebar-width: 260px;\n    --sis-header-height: 64px;\n    --sis-radius: 8px;\n    --sis-shadow: 0 4px 6px -1px rgb(0 0 0 \/ 0.1), 0 2px 4px -2px rgb(0 0 0 \/ 0.1);\n    --sis-transition: all 0.2s ease-in-out;\n}\n\n#sis-enterprise-root.sis-dark-theme {\n    --sis-bg: #0f172a;\n    --sis-card-bg: #1e293b;\n    --sis-border: #334155;\n    --sis-text: #f8fafc;\n    --sis-text-muted: #94a3b8;\n    --sis-primary-light: #1e3a8a;\n}\n\n\/* ==========================================================================\n   LAYOUT STRUCTURE\n   ========================================================================== *\/\n#sis-enterprise-root .sis-app-container {\n    display: flex;\n    min-height: 100vh;\n    background-color: var(--sis-bg);\n    color: var(--sis-text);\n}\n\n#sis-enterprise-root .sis-sidebar {\n    width: var(--sis-sidebar-width);\n    background-color: var(--sis-card-bg);\n    border-right: 1px solid var(--sis-border);\n    display: flex;\n    flex-direction: column;\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 100;\n    transition: transform 0.3s ease;\n}\n\n#sis-enterprise-root .sis-main-content {\n    flex: 1;\n    margin-left: var(--sis-sidebar-width);\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n}\n\n#sis-enterprise-root .sis-header {\n    height: var(--sis-header-height);\n    background-color: var(--sis-card-bg);\n    border-bottom: 1px solid var(--sis-border);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 0 24px;\n    position: sticky;\n    top: 0;\n    z-index: 90;\n}\n\n#sis-enterprise-root .sis-content-body {\n    padding: 24px;\n    flex: 1;\n    overflow-y: auto;\n}\n\n\/* ==========================================================================\n   COMPONENT STYLES: SIDEBAR & NAVIGATION\n   ========================================================================== *\/\n#sis-enterprise-root .sis-brand {\n    padding: 20px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    border-bottom: 1px solid var(--sis-border);\n}\n\n#sis-enterprise-root .sis-brand-logo {\n    width: 36px;\n    height: 36px;\n    background: var(--sis-primary);\n    color: #fff;\n    border-radius: var(--sis-radius);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-weight: 700;\n    font-size: 18px;\n}\n\n#sis-enterprise-root .sis-brand-title {\n    font-weight: 600;\n    font-size: 16px;\n    color: var(--sis-text);\n    line-height: 1.2;\n}\n\n#sis-enterprise-root .sis-brand-subtitle {\n    font-size: 11px;\n    color: var(--sis-text-muted);\n}\n\n#sis-enterprise-root .sis-nav-menu {\n    list-style: none;\n    padding: 16px 12px;\n    margin: 0;\n    flex: 1;\n    overflow-y: auto;\n}\n\n#sis-enterprise-root .sis-nav-item {\n    margin-bottom: 4px;\n}\n\n#sis-enterprise-root .sis-nav-link {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 10px 14px;\n    color: var(--sis-text-muted);\n    text-decoration: none;\n    border-radius: var(--sis-radius);\n    font-weight: 500;\n    transition: var(--sis-transition);\n}\n\n#sis-enterprise-root .sis-nav-link:hover, \n#sis-enterprise-root .sis-nav-link.active {\n    background-color: var(--sis-primary-light);\n    color: var(--sis-primary);\n}\n\n#sis-enterprise-root .sis-nav-link svg {\n    width: 20px;\n    height: 20px;\n}\n\n\/* ==========================================================================\n   UI CONTROLS & FORMS\n   ========================================================================== *\/\n#sis-enterprise-root .sis-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    padding: 8px 16px;\n    font-size: 14px;\n    font-weight: 500;\n    border-radius: var(--sis-radius);\n    border: 1px solid transparent;\n    cursor: pointer;\n    transition: var(--sis-transition);\n    text-decoration: none;\n    background-color: transparent;\n}\n\n#sis-enterprise-root .sis-btn-primary { background-color: var(--sis-primary); color: #ffffff; }\n#sis-enterprise-root .sis-btn-primary:hover { background-color: var(--sis-primary-hover); }\n\n#sis-enterprise-root .sis-btn-secondary { background-color: var(--sis-card-bg); border-color: var(--sis-border); color: var(--sis-text); }\n#sis-enterprise-root .sis-btn-secondary:hover { background-color: var(--sis-bg); }\n\n#sis-enterprise-root .sis-btn-danger { background-color: var(--sis-danger); color: #ffffff; }\n\n#sis-enterprise-root .sis-form-group { margin-bottom: 16px; }\n#sis-enterprise-root .sis-form-label { display: block; margin-bottom: 6px; font-weight: 500; font-size: 13px; color: var(--sis-text); }\n#sis-enterprise-root .sis-form-control { width: 100%; padding: 10px 12px; border: 1px solid var(--sis-border); border-radius: var(--sis-radius); background-color: var(--sis-card-bg); color: var(--sis-text); font-size: 14px; transition: var(--sis-transition); }\n#sis-enterprise-root .sis-form-control:focus { outline: none; border-color: var(--sis-primary); box-shadow: 0 0 0 3px var(--sis-primary-light); }\n\n\/* ==========================================================================\n   CARDS & TABLES\n   ========================================================================== *\/\n#sis-enterprise-root .sis-card { background-color: var(--sis-card-bg); border: 1px solid var(--sis-border); border-radius: var(--sis-radius); box-shadow: var(--sis-shadow); padding: 20px; margin-bottom: 20px; }\n#sis-enterprise-root .sis-table-container { width: 100%; overflow-x: auto; border: 1px solid var(--sis-border); border-radius: var(--sis-radius); background-color: var(--sis-card-bg); }\n#sis-enterprise-root .sis-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 14px; }\n#sis-enterprise-root .sis-table th, #sis-enterprise-root .sis-table td { padding: 12px 16px; border-bottom: 1px solid var(--sis-border); }\n#sis-enterprise-root .sis-table th { background-color: var(--sis-bg); font-weight: 600; color: var(--sis-text-muted); }\n#sis-enterprise-root .sis-table tbody tr:hover { background-color: var(--sis-primary-light); }\n\n\/* ==========================================================================\n   MODALS & TOASTS\n   ========================================================================== *\/\n#sis-enterprise-root .sis-modal-backdrop { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; opacity: 0; visibility: hidden; transition: var(--sis-transition); }\n#sis-enterprise-root .sis-modal-backdrop.active { opacity: 1; visibility: visible; }\n#sis-enterprise-root .sis-modal { background-color: var(--sis-card-bg); border-radius: var(--sis-radius); width: 100%; max-width: 700px; max-height: 90vh; display: flex; flex-direction: column; box-shadow: 0 20px 25px -5px rgb(0 0 0 \/ 0.1); transform: translateY(20px); transition: transform 0.3s ease; }\n#sis-enterprise-root .sis-modal-backdrop.active .sis-modal { transform: translateY(0); }\n#sis-enterprise-root .sis-modal-header { padding: 16px 20px; border-bottom: 1px solid var(--sis-border); display: flex; align-items: center; justify-content: space-between; }\n#sis-enterprise-root .sis-modal-body { padding: 20px; overflow-y: auto; flex: 1; }\n#sis-enterprise-root .sis-modal-footer { padding: 16px 20px; border-top: 1px solid var(--sis-border); display: flex; justify-content: flex-end; gap: 12px; }\n\n#sis-enterprise-root .sis-toast-container { position: fixed; bottom: 24px; right: 24px; z-index: 1100; display: flex; flex-direction: column; gap: 10px; max-width: 400px; }\n#sis-enterprise-root .sis-toast { padding: 14px 18px; border-radius: var(--sis-radius); background-color: var(--sis-card-bg); color: var(--sis-text); border-left: 4px solid var(--sis-primary); box-shadow: var(--sis-shadow); display: flex; align-items: center; justify-content: space-between; gap: 12px; animation: sisSlideIn 0.3s ease forwards; }\n@keyframes sisSlideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }\n#sis-enterprise-root .sis-toast.success { border-left-color: var(--sis-success); }\n#sis-enterprise-root .sis-toast.warning { border-left-color: var(--sis-warning); }\n#sis-enterprise-root .sis-toast.error { border-left-color: var(--sis-danger); }\n\n\/* ==========================================================================\n   UTILITY CLASSES & RESPONSIVE DESIGN\n   ========================================================================== *\/\n#sis-enterprise-root .sis-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }\n#sis-enterprise-root .sis-grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }\n#sis-enterprise-root .sis-grid-4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }\n#sis-enterprise-root .sis-flex { display: flex; }\n#sis-enterprise-root .sis-items-center { align-items: center; }\n#sis-enterprise-root .sis-justify-between { justify-content: space-between; }\n#sis-enterprise-root .sis-gap-4 { gap: 16px; }\n#sis-enterprise-root .sis-mb-4 { margin-bottom: 16px; }\n#sis-enterprise-root .sis-text-muted { color: var(--sis-text-muted); }\n\n@media (max-width: 768px) {\n    #sis-enterprise-root .sis-sidebar { transform: translateX(-100%); }\n    #sis-enterprise-root .sis-main-content { margin-left: 0; }\n    #sis-enterprise-root .sis-grid-2, #sis-enterprise-root .sis-grid-3, #sis-enterprise-root .sis-grid-4 { grid-template-columns: minmax(0, 1fr); }\n}\n\n@media print {\n    body * { visibility: hidden; }\n    #sis-enterprise-root, #sis-enterprise-root * { visibility: visible; }\n    #sis-enterprise-root { position: absolute; left: 0; top: 0; width: 100%; background: #ffffff !important; color: #000000 !important; }\n    #sis-enterprise-root .sis-sidebar, #sis-enterprise-root .sis-header, #sis-enterprise-root .sis-btn, #sis-enterprise-root .sis-modal-backdrop { display: none !important; }\n    #sis-enterprise-root .sis-main-content { margin-left: 0 !important; }\n}\n<\/style>\n<\/head>\n<body>\n\n<!-- WordPress Unique Scoped Container -->\n<div id=\"sis-enterprise-root\">\n    <div class=\"sis-app-container\">\n        \n        <!-- Sidebar Navigation -->\n        <aside class=\"sis-sidebar\" id=\"sisSidebar\">\n            <div class=\"sis-brand\">\n                <div class=\"sis-brand-logo\" id=\"sisBrandLogo\">AU<\/div>\n                <div>\n                    <div class=\"sis-brand-title\" id=\"sisBrandTitle\">Apex University<\/div>\n                    <div class=\"sis-brand-subtitle\">Master SIS v4.0<\/div>\n                <\/div>\n            <\/div>\n            <ul class=\"sis-nav-menu\">\n                <li class=\"sis-nav-item\">\n                    <a href=\"#dashboard\" class=\"sis-nav-link active\" data-target=\"dashboard\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"\/><\/svg>\n                        Dashboard\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#students\" class=\"sis-nav-link\" data-target=\"students\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg>\n                        Students Directory\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#promotion\" class=\"sis-nav-link\" data-target=\"promotion\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"18 15 12 9 6 15\"\/><\/svg>\n                        Student Promotion\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#duplicates\" class=\"sis-nav-link\" data-target=\"duplicates\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg>\n                        Duplicate Detector\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#idcards\" class=\"sis-nav-link\" data-target=\"idcards\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\"\/><line x1=\"2\" y1=\"10\" x2=\"22\" y2=\"10\"\/><\/svg>\n                        ID Cards &#038; Badges\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#audit\" class=\"sis-nav-link\" data-target=\"audit\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\"\/><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"\/><\/svg>\n                        Audit Logs\n                    <\/a>\n                <\/li>\n                <li class=\"sis-nav-item\">\n                    <a href=\"#settings\" class=\"sis-nav-link\" data-target=\"settings\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"\/><\/svg>\n                        Settings &#038; Export\n                    <\/a>\n                <\/li>\n            <\/ul>\n        <\/aside>\n\n        <!-- Main Content Area -->\n        <main class=\"sis-main-content\">\n            <header class=\"sis-header\">\n                <div class=\"sis-flex sis-items-center sis-gap-4\">\n                    <h2 id=\"sisViewTitle\" style=\"font-size: 18px; font-weight: 600; margin:0;\">Dashboard Overview<\/h2>\n                <\/div>\n                <div class=\"sis-flex sis-items-center sis-gap-4\">\n                    <select id=\"sisRoleSelector\" class=\"sis-form-control\" style=\"width: 140px; padding: 6px 10px;\">\n                        <option value=\"Super Admin\">Super Admin<\/option>\n                        <option value=\"Admin\">Admin<\/option>\n                        <option value=\"Faculty\">Faculty<\/option>\n                        <option value=\"Office Staff\">Office Staff<\/option>\n                        <option value=\"Read Only\">Read Only<\/option>\n                    <\/select>\n                    <button class=\"sis-btn sis-btn-primary\" id=\"sisGlobalNewBtn\">+ New Student<\/button>\n                <\/div>\n            <\/header>\n\n            <div class=\"sis-content-body\" id=\"sisContentArea\">\n                <!-- Dynamic Content Injection Engine -->\n            <\/div>\n        <\/main>\n\n    <\/div>\n\n    <!-- Toast Notification Container -->\n    <div class=\"sis-toast-container\" id=\"sisToastContainer\"><\/div>\n\n    <!-- Generic Modal Dialog -->\n    <div class=\"sis-modal-backdrop\" id=\"sisModalBackdrop\">\n        <div class=\"sis-modal\" id=\"sisModal\">\n            <div class=\"sis-modal-header\">\n                <h3 id=\"sisModalTitle\" style=\"margin:0; font-size:16px;\">Modal Title<\/h3>\n                <button class=\"sis-btn sis-btn-secondary\" id=\"sisModalClose\" style=\"padding:4px 8px;\">&times;<\/button>\n            <\/div>\n            <div class=\"sis-modal-body\" id=\"sisModalBody\">\n                <!-- Dynamic Form Injection -->\n            <\/div>\n            <div class=\"sis-modal-footer\" id=\"sisModalFooter\">\n                <button class=\"sis-btn sis-btn-secondary\" id=\"sisModalCancel\">Cancel<\/button>\n                <button class=\"sis-btn sis-btn-primary\" id=\"sisModalSubmit\">Save Changes<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- ==========================================================================\n   MASTER ENTERPRISE SCRIPT ENGINE\n   ========================================================================== -->\n<script>\n(function() {\n    'use strict';\n\n    let currentRole = 'Super Admin';\n    let appSettings = {\n        instituteName: 'Apex University',\n        collegeLogo: 'AU',\n        address: '123 University Avenue, Tech City',\n        website: 'https:\/\/apex.edu',\n        email: 'info@apex.edu',\n        phone: '+1-555-0199',\n        principalName: 'Dr. Robert Langdon',\n        academicSession: '2026-2027',\n        currentSemester: 'Fall 2026',\n        defaultDepartment: 'Computer Science',\n        theme: 'Light'\n    };\n\n    let studentsStore = [\n        { studentId: 'STU-101', rollNumber: 'CS-2026-001', registrationNumber: 'REG-99101', fullName: 'Alice Johnson', gender: 'Female', department: 'Computer Science', semester: '4', section: 'A', status: 'Active', residence: 'Hosteller', tags: ['Top Performer'] },\n        { studentId: 'STU-102', rollNumber: 'CS-2026-002', registrationNumber: 'REG-99102', fullName: 'Bob Smith', gender: 'Male', department: 'Computer Science', semester: '4', section: 'A', status: 'Active', residence: 'Day Scholar', tags: ['Scholarship Eligible'] },\n        { studentId: 'STU-103', rollNumber: 'EC-2026-001', registrationNumber: 'REG-99103', fullName: 'Charlie Davis', gender: 'Male', department: 'Electronics', semester: '2', section: 'B', status: 'Active', residence: 'Hosteller', tags: [] }\n    ];\n\n    let auditLogsStore = [\n        { logId: 'LOG-001', timestamp: new Date().toISOString(), action: 'System Boot', module: 'System', role: 'Super Admin', recordId: 'BOOT_001' }\n    ];\n\n    let activeView = 'dashboard';\n\n    function initSIS() {\n        loadLocalStorageData();\n        setupEventListeners();\n        router(window.location.hash || '#dashboard');\n        showToast('SIS Master Enterprise Edition Initialized', 'success');\n    }\n\n    function loadLocalStorageData() {\n        const savedStudents = localStorage.getItem('sis_students');\n        if (savedStudents) { try { studentsStore = JSON.parse(savedStudents); } catch(e) {} }\n        const savedSettings = localStorage.getItem('sis_settings');\n        if (savedSettings) { try { appSettings = JSON.parse(savedSettings); } catch(e) {} }\n        const savedLogs = localStorage.getItem('sis_logs');\n        if (savedLogs) { try { auditLogsStore = JSON.parse(savedLogs); } catch(e) {} }\n        updateBrandUI();\n    }\n\n    function persistData() {\n        localStorage.setItem('sis_students', JSON.stringify(studentsStore));\n        localStorage.setItem('sis_settings', JSON.stringify(appSettings));\n        localStorage.setItem('sis_logs', JSON.stringify(auditLogsStore));\n    }\n\n    function updateBrandUI() {\n        document.getElementById('sisBrandTitle').textContent = appSettings.instituteName;\n        document.getElementById('sisBrandLogo').textContent = appSettings.collegeLogo || 'SIS';\n    }\n\n    function logAudit(action, module, role, recordId) {\n        const entry = {\n            logId: 'LOG-' + Date.now(),\n            timestamp: new Date().toISOString(),\n            action, module, role, recordId\n        };\n        auditLogsStore.unshift(entry);\n        persistData();\n    }\n\n    function router(hash) {\n        const view = hash.replace('#', '') || 'dashboard';\n        activeView = view;\n        \n        document.querySelectorAll('#sis-enterprise-root .sis-nav-link').forEach(link => {\n            if (link.getAttribute('data-target') === view) {\n                link.classList.add('active');\n            } else {\n                link.classList.remove('active');\n            }\n        });\n\n        const titleMap = {\n            'dashboard': 'Dashboard Overview',\n            'students': 'Students Directory & Management',\n            'promotion': 'Student Semester Promotion Engine',\n            'duplicates': 'Duplicate Record Detection',\n            'idcards': 'ID Card & QR Generator',\n            'audit': 'System Audit Trail',\n            'settings': 'Enterprise Settings & Data Export'\n        };\n        document.getElementById('sisViewTitle').textContent = titleMap[view] || 'Enterprise SIS';\n        renderView(view);\n    }\n\n    function renderView(view) {\n        const container = document.getElementById('sisContentArea');\n        container.innerHTML = '';\n\n        switch(view) {\n            case 'dashboard':\n                renderDashboard(container);\n                break;\n            case 'students':\n                renderStudentsView(container);\n                break;\n            case 'promotion':\n                renderPromotionView(container);\n                break;\n            case 'duplicates':\n                renderDuplicatesView(container);\n                break;\n            case 'idcards':\n                renderIDCardsView(container);\n                break;\n            case 'audit':\n                renderAuditView(container);\n                break;\n            case 'settings':\n                renderSettingsView(container);\n                break;\n            default:\n                container.innerHTML = '<div class=\"sis-card\"><h3>View Not Found<\/h3><\/div>';\n        }\n    }\n\n    function renderDashboard(container) {\n        const total = studentsStore.length;\n        const active = studentsStore.filter(s => s.status === 'Active').length;\n        const hostellers = studentsStore.filter(s => s.residence === 'Hosteller').length;\n        \n        container.innerHTML = `\n            <div class=\"sis-grid-4 sis-mb-4\">\n                <div class=\"sis-card\">\n                    <div class=\"sis-text-muted\">Total Students<\/div>\n                    <div style=\"font-size: 28px; font-weight: 700; margin-top: 8px;\">${total}<\/div>\n                <\/div>\n                <div class=\"sis-card\">\n                    <div class=\"sis-text-muted\">Active Enrollments<\/div>\n                    <div style=\"font-size: 28px; font-weight: 700; margin-top: 8px; color: var(--sis-success);\">${active}<\/div>\n                <\/div>\n                <div class=\"sis-card\">\n                    <div class=\"sis-text-muted\">Hostel Residents<\/div>\n                    <div style=\"font-size: 28px; font-weight: 700; margin-top: 8px; color: var(--sis-primary);\">${hostellers}<\/div>\n                <\/div>\n                <div class=\"sis-card\">\n                    <div class=\"sis-text-muted\">System Engine<\/div>\n                    <div style=\"font-size: 18px; font-weight: 700; margin-top: 12px; color: var(--sis-success);\">Master Active<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"sis-card\">\n                <h3>Master SIS Dashboard<\/h3>\n                <p class=\"sis-text-muted\">Fully loaded with Student Lifecycles, Bulk Promotion, Smart Tags, Duplicate Detection, ID Badge generation, and JSON\/CSV Exports.<\/p>\n            <\/div>\n        `;\n    }\n\n    function renderStudentsView(container) {\n        container.innerHTML = `\n            <div class=\"sis-card sis-flex sis-justify-between sis-items-center sis-mb-4\">\n                <input type=\"text\" id=\"sisStudentSearch\" class=\"sis-form-control\" placeholder=\"Search by name, roll number, department...\" style=\"max-width: 400px;\">\n                <button class=\"sis-btn sis-btn-primary\" id=\"sisAddStudentBtn\">+ Add New Student<\/button>\n            <\/div>\n            <div class=\"sis-table-container\">\n                <table class=\"sis-table\">\n                    <thead>\n                        <tr>\n                            <th>Student ID<\/th>\n                            <th>Roll Number<\/th>\n                            <th>Full Name<\/th>\n                            <th>Department<\/th>\n                            <th>Semester<\/th>\n                            <th>Status & Tags<\/th>\n                            <th>Actions<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody id=\"sisStudentTableBody\"><\/tbody>\n                <\/table>\n            <\/div>\n        `;\n\n        document.getElementById('sisAddStudentBtn').addEventListener('click', () => openStudentModal());\n        populateStudentTable(studentsStore);\n\n        document.getElementById('sisStudentSearch').addEventListener('input', (e) => {\n            const term = e.target.value.toLowerCase();\n            const filtered = studentsStore.filter(s => \n                s.fullName.toLowerCase().includes(term) ||\n                s.rollNumber.toLowerCase().includes(term) ||\n                s.department.toLowerCase().includes(term)\n            );\n            populateStudentTable(filtered);\n        });\n    }\n\n    function populateStudentTable(students) {\n        const tbody = document.getElementById('sisStudentTableBody');\n        if (!students.length) {\n            tbody.innerHTML = '<tr><td colspan=\"7\" class=\"sis-text-muted\" style=\"text-align: center;\">No student records found.<\/td><\/tr>';\n            return;\n        }\n        tbody.innerHTML = students.map(s => `\n            <tr>\n                <td>${s.studentId}<\/td>\n                <td><strong>${s.rollNumber}<\/strong><\/td>\n                <td>${s.fullName}<\/td>\n                <td>${s.department}<\/td>\n                <td>Sem ${s.semester}<\/td>\n                <td>\n                    <span style=\"color: ${s.status === 'Active' ? 'var(--sis-success)' : 'var(--sis-danger)'}\">${s.status}<\/span>\n                    <br><span class=\"sis-text-muted\" style=\"font-size: 11px;\">${(s.tags || []).join(', ')}<\/span>\n                <\/td>\n                <td>\n                    <button class=\"sis-btn sis-btn-secondary\" style=\"padding: 4px 8px;\" onclick=\"window.SIS_API.editStudent('${s.studentId}')\">Edit<\/button>\n                    <button class=\"sis-btn sis-btn-danger\" style=\"padding: 4px 8px;\" onclick=\"window.SIS_API.deleteStudent('${s.studentId}')\">Delete<\/button>\n                <\/td>\n            <\/tr>\n        `).join('');\n    }\n\n    function renderPromotionView(container) {\n        container.innerHTML = `\n            <div class=\"sis-card\">\n                <h3>Bulk Student Promotion Engine<\/h3>\n                <p class=\"sis-text-muted\">Promote active students from one semester to the next in bulk.<\/p>\n                <div class=\"sis-grid-2\" style=\"margin-top: 20px;\">\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">From Semester<\/label>\n                        <select id=\"promoteFrom\" class=\"sis-form-control\">\n                            <option value=\"1\">Semester 1<\/option>\n                            <option value=\"2\">Semester 2<\/option>\n                            <option value=\"3\">Semester 3<\/option>\n                            <option value=\"4\">Semester 4<\/option>\n                            <option value=\"5\">Semester 5<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">To Semester<\/label>\n                        <select id=\"promoteTo\" class=\"sis-form-control\">\n                            <option value=\"2\">Semester 2<\/option>\n                            <option value=\"3\">Semester 3<\/option>\n                            <option value=\"4\">Semester 4<\/option>\n                            <option value=\"5\">Semester 5<\/option>\n                            <option value=\"6\">Semester 6<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n                <button class=\"sis-btn sis-btn-primary\" id=\"executePromotionBtn\" style=\"margin-top: 10px;\">Execute Bulk Promotion<\/button>\n            <\/div>\n        `;\n\n        document.getElementById('executePromotionBtn').addEventListener('click', () => {\n            const fromSem = document.getElementById('promoteFrom').value;\n            const toSem = document.getElementById('promoteTo').value;\n            let count = 0;\n            studentsStore.forEach(s => {\n                if (s.semester === fromSem && s.status === 'Active') {\n                    s.semester = toSem;\n                    count++;\n                }\n            });\n            persistData();\n            showToast(`Successfully promoted ${count} students to Semester ${toSem}.`, 'success');\n            logAudit('Student Promotion', 'Students', currentRole, `PROMOTE_${fromSem}_TO_${toSem}`);\n            renderView('students');\n        });\n    }\n\n    function renderDuplicatesView(container) {\n        const rollMap = {};\n        const duplicates = [];\n        studentsStore.forEach(s => {\n            if (rollMap[s.rollNumber]) {\n                duplicates.push(s);\n            } else {\n                rollMap[s.rollNumber] = true;\n            }\n        });\n\n        container.innerHTML = `\n            <div class=\"sis-card\">\n                <h3>Duplicate Record Detection<\/h3>\n                <p class=\"sis-text-muted\">Scans dataset for colliding Roll Numbers or Registration identifiers.<\/p>\n                <div style=\"margin-top: 20px;\">\n                    ${duplicates.length === 0 ? '<p style=\"color: var(--sis-success);\">No duplicate student records detected in current dataset.<\/p>' : '<p style=\"color: var(--sis-danger);\">Duplicates found!<\/p>'}\n                <\/div>\n            <\/div>\n        `;\n    }\n\n    function renderIDCardsView(container) {\n        container.innerHTML = `\n            <div class=\"sis-card\">\n                <h3>Printable Student ID Card Generator<\/h3>\n                <p class=\"sis-text-muted\">Generate secure CR80 layout student badges.<\/p>\n                <div class=\"sis-form-group\" style=\"margin-top: 20px;\">\n                    <label class=\"sis-form-label\">Select Student for ID Badge<\/label>\n                    <select id=\"sisIDStudentSelect\" class=\"sis-form-control\" style=\"max-width: 400px;\"><\/select>\n                <\/div>\n                <div id=\"sisIDCardPreviewArea\" style=\"margin-top: 20px;\"><\/div>\n            <\/div>\n        `;\n        const select = document.getElementById('sisIDStudentSelect');\n        select.innerHTML = studentsStore.map(s => `<option value=\"${s.studentId}\">${s.fullName} (${s.rollNumber})<\/option>`).join('');\n        if (studentsStore.length) renderIDCardPreview(studentsStore[0]);\n        select.addEventListener('change', (e) => {\n            const student = studentsStore.find(s => s.studentId === e.target.value);\n            if (student) renderIDCardPreview(student);\n        });\n    }\n\n    function renderIDCardPreview(student) {\n        const area = document.getElementById('sisIDCardPreviewArea');\n        area.innerHTML = `\n            <div style=\"width: 340px; height: 215px; background: linear-gradient(135deg, var(--sis-primary), #1e40af); color: #fff; border-radius: 12px; padding: 16px; box-shadow: var(--sis-shadow); display: flex; flex-direction: column; justify-content: space-between;\">\n                <div style=\"display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(255,255,255,0.2); padding-bottom: 8px;\">\n                    <strong>${appSettings.instituteName}<\/strong>\n                    <span style=\"font-size: 10px; background: rgba(255,255,255,0.2); padding: 2px 6px; border-radius: 4px;\">STUDENT ID<\/span>\n                <\/div>\n                <div style=\"display: flex; gap: 14px; align-items: center;\">\n                    <div style=\"width: 70px; height: 85px; background: #fff; color: #000; display: flex; align-items: center; justify-content: center; font-weight: bold; border-radius: 6px;\">PHOTO<\/div>\n                    <div>\n                        <div style=\"font-size: 16px; font-weight: 700;\">${student.fullName}<\/div>\n                        <div style=\"font-size: 12px; opacity: 0.9;\">Roll: ${student.rollNumber}<\/div>\n                        <div style=\"font-size: 12px; opacity: 0.9;\">Dept: ${student.department}<\/div>\n                        <div style=\"font-size: 12px; opacity: 0.9;\">Sem: ${student.semester} | Sec: ${student.section}<\/div>\n                    <\/div>\n                <\/div>\n                <div style=\"font-size: 10px; opacity: 0.8; text-align: center; border-top: 1px solid rgba(255,255,255,0.2); pt-4;\">Valid thru: ${appSettings.academicSession}<\/div>\n            <\/div>\n            <div style=\"margin-top: 20px;\">\n                <button class=\"sis-btn sis-btn-primary\" onclick=\"window.print()\">Print ID Badge Layout<\/button>\n            <\/div>\n        `;\n    }\n\n    function renderAuditView(container) {\n        container.innerHTML = `\n            <div class=\"sis-card\">\n                <h3>System Audit Trail<\/h3>\n                <p class=\"sis-text-muted\">Immutable local audit log recording administrative and automated data transactions.<\/p>\n                <div class=\"sis-table-container\" style=\"margin-top: 20px;\">\n                    <table class=\"sis-table\">\n                        <thead><tr><th>Timestamp<\/th><th>Action<\/th><th>Module<\/th><th>Role<\/th><th>Record ID<\/th><\/tr><\/thead>\n                        <tbody>\n                            ${auditLogsStore.map(l => `\n                                <tr>\n                                    <td>${new Date(l.timestamp).toLocaleString()}<\/td>\n                                    <td><strong>${l.action}<\/strong><\/td>\n                                    <td>${l.module}<\/td>\n                                    <td>${l.role}<\/td>\n                                    <td>${l.recordId}<\/td>\n                                <\/tr>\n                            `).join('')}\n                        <\/tbody>\n                    <\/table>\n                <\/div>\n            <\/div>\n        `;\n    }\n\n    function renderSettingsView(container) {\n        container.innerHTML = `\n            <div class=\"sis-card\">\n                <h3>Enterprise Settings & Data Export<\/h3>\n                <p class=\"sis-text-muted\">Configure institute parameters and export your entire dataset package as JSON or CSV.<\/p>\n                <form id=\"sisSettingsForm\" style=\"margin-top: 20px;\">\n                    <div class=\"sis-grid-2\">\n                        <div class=\"sis-form-group\">\n                            <label class=\"sis-form-label\">Institute Name<\/label>\n                            <input type=\"text\" id=\"setInstituteName\" class=\"sis-form-control\" value=\"${appSettings.instituteName}\">\n                        <\/div>\n                        <div class=\"sis-form-group\">\n                            <label class=\"sis-form-label\">Academic Session<\/label>\n                            <input type=\"text\" id=\"setAcademicSession\" class=\"sis-form-control\" value=\"${appSettings.academicSession}\">\n                        <\/div>\n                    <\/div>\n                    <div class=\"sis-flex sis-gap-4\" style=\"margin-top: 20px;\">\n                        <button type=\"submit\" class=\"sis-btn sis-btn-primary\">Save Settings<\/button>\n                        <button type=\"button\" class=\"sis-btn sis-btn-secondary\" id=\"sisExportJSONBtn\">Export Full JSON Backup<\/button>\n                        <button type=\"button\" class=\"sis-btn sis-btn-secondary\" id=\"sisExportCSVBtn\">Export Students CSV<\/button>\n                    <\/div>\n                <\/form>\n            <\/div>\n        `;\n\n        document.getElementById('sisSettingsForm').addEventListener('submit', (e) => {\n            e.preventDefault();\n            appSettings.instituteName = document.getElementById('setInstituteName').value;\n            appSettings.academicSession = document.getElementById('setAcademicSession').value;\n            persistData();\n            updateBrandUI();\n            showToast('Settings updated successfully.', 'success');\n            logAudit('Settings Changed', 'Settings', currentRole, 'CONFIG_001');\n        });\n\n        document.getElementById('sisExportJSONBtn').addEventListener('click', () => {\n            const dataStr = \"data:text\/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify({ students: studentsStore, settings: appSettings, logs: auditLogsStore }, null, 2));\n            const dlAnchor = document.createElement('a');\n            dlAnchor.setAttribute(\"href\", dataStr);\n            dlAnchor.setAttribute(\"download\", \"sis_enterprise_backup_\" + Date.now() + \".json\");\n            document.body.appendChild(dlAnchor);\n            dlAnchor.click();\n            dlAnchor.remove();\n            showToast('JSON Backup exported successfully.', 'success');\n            logAudit('Backup Created', 'Settings', currentRole, 'EXPORT_JSON');\n        });\n\n        document.getElementById('sisExportCSVBtn').addEventListener('click', () => {\n            let csv = 'Student ID,Roll Number,Registration Number,Full Name,Department,Semester,Status,Residence\\n';\n            studentsStore.forEach(s => {\n                csv += `\"${s.studentId}\",\"${s.rollNumber}\",\"${s.registrationNumber}\",\"${s.fullName}\",\"${s.department}\",\"${s.semester}\",\"${s.status}\",\"${s.residence}\"\\n`;\n            });\n            const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n            const url = URL.createObjectURL(blob);\n            const dlAnchor = document.createElement('a');\n            dlAnchor.setAttribute(\"href\", url);\n            dlAnchor.setAttribute(\"download\", \"students_export_\" + Date.now() + \".csv\");\n            document.body.appendChild(dlAnchor);\n            dlAnchor.click();\n            dlAnchor.remove();\n            showToast('Students CSV exported successfully.', 'success');\n            logAudit('Data Exported', 'Settings', currentRole, 'EXPORT_CSV');\n        });\n    }\n\n    function openStudentModal(studentId = null) {\n        const isEdit = Boolean(studentId);\n        const modalBackdrop = document.getElementById('sisModalBackdrop');\n        const modalTitle = document.getElementById('sisModalTitle');\n        const modalBody = document.getElementById('sisModalBody');\n        \n        modalTitle.textContent = isEdit ? 'Edit Student Record' : 'Register New Student';\n        \n        modalBody.innerHTML = `\n            <form id=\"sisStudentForm\">\n                <div class=\"sis-grid-2\">\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Full Name *<\/label>\n                        <input type=\"text\" id=\"modalFullName\" class=\"sis-form-control\" required>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Roll Number *<\/label>\n                        <input type=\"text\" id=\"modalRollNumber\" class=\"sis-form-control\" required>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Registration Number *<\/label>\n                        <input type=\"text\" id=\"modalRegNumber\" class=\"sis-form-control\" required>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Department *<\/label>\n                        <input type=\"text\" id=\"modalDepartment\" class=\"sis-form-control\" value=\"Computer Science\" required>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Semester *<\/label>\n                        <select id=\"modalSemester\" class=\"sis-form-control\">\n                            <option value=\"1\">Semester 1<\/option>\n                            <option value=\"2\">Semester 2<\/option>\n                            <option value=\"3\">Semester 3<\/option>\n                            <option value=\"4\" selected>Semester 4<\/option>\n                            <option value=\"5\">Semester 5<\/option>\n                            <option value=\"6\">Semester 6<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Status<\/label>\n                        <select id=\"modalStatus\" class=\"sis-form-control\">\n                            <option value=\"Active\">Active<\/option>\n                            <option value=\"Inactive\">Inactive<\/option>\n                            <option value=\"Graduated\">Graduated<\/option>\n                            <option value=\"Alumni\">Alumni<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"sis-form-group\">\n                        <label class=\"sis-form-label\">Smart Tags (comma separated)<\/label>\n                        <input type=\"text\" id=\"modalTags\" class=\"sis-form-control\" placeholder=\"Top Performer, Hosteller\">\n                    <\/div>\n                <\/div>\n            <\/form>\n        `;\n\n        if (isEdit) {\n            const s = studentsStore.find(x => x.studentId === studentId);\n            if (s) {\n                document.getElementById('modalFullName').value = s.fullName;\n                document.getElementById('modalRollNumber').value = s.rollNumber;\n                document.getElementById('modalRegNumber').value = s.registrationNumber;\n                document.getElementById('modalDepartment').value = s.department;\n                document.getElementById('modalSemester').value = s.semester;\n                document.getElementById('modalStatus').value = s.status;\n                document.getElementById('modalTags').value = (s.tags || []).join(', ');\n            }\n        }\n\n        modalBackdrop.classList.add('active');\n\n        const submitBtn = document.getElementById('sisModalSubmit');\n        const newSubmitBtn = submitBtn.cloneNode(true);\n        submitBtn.parentNode.replaceChild(newSubmitBtn, submitBtn);\n\n        newSubmitBtn.addEventListener('click', () => {\n            const fullName = document.getElementById('modalFullName').value.trim();\n            const rollNumber = document.getElementById('modalRollNumber').value.trim();\n            const registrationNumber = document.getElementById('modalRegNumber').value.trim();\n            const tagsInput = document.getElementById('modalTags').value.trim();\n            \n            if (!fullName || !rollNumber || !registrationNumber) {\n                showToast('Please fill out all required fields.', 'error');\n                return;\n            }\n\n            const record = {\n                studentId: studentId || ('STU-' + Date.now()),\n                rollNumber,\n                registrationNumber,\n                fullName,\n                department: document.getElementById('modalDepartment').value,\n                semester: document.getElementById('modalSemester').value,\n                gender: 'Male',\n                status: document.getElementById('modalStatus').value,\n                residence: 'Hosteller',\n                tags: tagsInput ? tagsInput.split(',').map(t => t.trim()) : []\n            };\n\n            if (isEdit) {\n                const index = studentsStore.findIndex(x => x.studentId === studentId);\n                if (index !== -1) studentsStore[index] = record;\n            } else {\n                studentsStore.unshift(record);\n            }\n\n            persistData();\n            modalBackdrop.classList.remove('active');\n            showToast(isEdit ? 'Student updated successfully.' : 'Student added successfully.', 'success');\n            logAudit(isEdit ? 'Student Edited' : 'Student Added', 'Students', currentRole, record.studentId);\n            renderView(activeView);\n        });\n    }\n\n    function showToast(message, type = 'success') {\n        const container = document.getElementById('sisToastContainer');\n        const toast = document.createElement('div');\n        toast.className = `sis-toast ${type}`;\n        toast.innerHTML = `<span>${message}<\/span>`;\n        container.appendChild(toast);\n        setTimeout(() => {\n            toast.style.opacity = '0';\n            setTimeout(() => toast.remove(), 300);\n        }, 3500);\n    }\n\n    function setupEventListeners() {\n        document.querySelectorAll('#sis-enterprise-root .sis-nav-link').forEach(link => {\n            link.addEventListener('click', (e) => {\n                e.preventDefault();\n                const target = link.getAttribute('data-target');\n                window.location.hash = target;\n                router(target);\n            });\n        });\n\n        window.addEventListener('hashchange', () => {\n            router(window.location.hash);\n        });\n\n        document.getElementById('sisGlobalNewBtn').addEventListener('click', () => openStudentModal());\n\n        document.getElementById('sisRoleSelector').addEventListener('change', (e) => {\n            currentRole = e.target.value;\n            showToast(`Simulated Role switched to: ${currentRole}`, 'info');\n        });\n\n        const closeModal = () => document.getElementById('sisModalBackdrop').classList.remove('active');\n        document.getElementById('sisModalClose').addEventListener('click', closeModal);\n        document.getElementById('sisModalCancel').addEventListener('click', closeModal);\n\n        window.addEventListener('keydown', (e) => {\n            if (e.ctrlKey && e.key === 'n') {\n                e.preventDefault();\n                openStudentModal();\n            }\n            if (e.key === 'Escape') {\n                closeModal();\n            }\n        });\n    }\n\n    window.SIS_API = {\n        editStudent: (id) => openStudentModal(id),\n        deleteStudent: (id) => {\n            if (confirm('Are you sure you want to delete this student record?')) {\n                studentsStore = studentsStore.filter(s => s.studentId !== id);\n                persistData();\n                showToast('Student record deleted.', 'success');\n                logAudit('Student Deleted', 'Students', currentRole, id);\n                renderView(activeView);\n            }\n        }\n    };\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', initSIS);\n    } else {\n        initSIS();\n    }\n\n})();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Enterprise Student Information System (SIS) \u2013 Complete Master Edition AU Apex University Master SIS v4.0 Dashboard Students Directory Student Promotion Duplicate Detector ID Cards &#038; Badges Audit Logs Settings &#038; Export Dashboard Overview Super AdminAdminFacultyOffice StaffRead Only + New Student Modal Title &times; Cancel Save Changes<\/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-815","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/815","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=815"}],"version-history":[{"count":2,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/815\/revisions"}],"predecessor-version":[{"id":817,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/815\/revisions\/817"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}