:root{color-scheme:light;--primary:#3d5ee1;--primary-dark:#2f4cbd;--secondary:#6fccd8;--success:#1abe17;--info:#0f65cd;--warning:#eab300;--danger:#e82646;--dark:#202c4b;--body-color:#6a7a94;--border:#e6ebf2;--light-bg:#f7f9fc;--sidebar-bg:#fff;--header-h:60px;--sidebar-w:280px;--radius:8px;--shadow:0 2px 10px rgba(32,44,75,.06)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:var(--light-bg);color:var(--dark);font-size:14px;line-height:1.5}a{color:var(--primary);text-decoration:none}h1,h2,h3,h4{margin:0;font-weight:600;color:var(--dark)}.shell{display:flex;min-height:100vh}.main-area{flex:1 1;margin-left:var(--sidebar-w);min-width:0}.content{padding:24px;margin-top:var(--header-h)}.topbar{position:fixed;top:0;left:var(--sidebar-w);right:0;height:var(--header-h);background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:16px;padding:0 24px;z-index:50}.topbar .logo-text{font-size:20px;font-weight:700;color:var(--primary);display:none}.global-search{position:relative;flex:0 1 380px}.global-search input{width:100%;padding:9px 14px 9px 36px;border:1px solid var(--border);border-radius:24px;background:var(--light-bg);outline:none;font-size:13px}.global-search input:focus{border-color:var(--primary);background:#fff}.global-search .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--body-color)}.search-results{position:absolute;top:46px;left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 10px 30px rgba(32,44,75,.15);overflow:hidden;z-index:60}.search-results button{display:flex;justify-content:space-between;width:100%;padding:9px 14px;background:none;border:none;cursor:pointer;font-size:13px;text-align:left}.search-results button:hover{background:var(--light-bg)}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:14px}.year-pill{background:rgba(61,94,225,.1);color:var(--primary);border-radius:24px;padding:6px 14px;font-size:12px;font-weight:600;white-space:nowrap}.bell-btn{position:relative;background:none;border:none;cursor:pointer;font-size:18px;padding:6px}.bell-dot{position:absolute;top:2px;right:2px;background:var(--danger);color:#fff;font-size:10px;border-radius:50%;min-width:16px;height:16px;line-height:16px;text-align:center}.user-menu{position:relative}.user-chip{gap:10px;background:none;border:none;cursor:pointer;padding:4px}.avatar,.user-chip{display:flex;align-items:center}.avatar{width:36px;height:36px;border-radius:50%;background:var(--primary);color:#fff;justify-content:center;font-weight:700;font-size:14px}.user-chip .user-meta{text-align:left;line-height:1.2}.user-chip .user-meta strong{display:block;font-size:13px}.user-chip .user-meta span{font-size:11px;color:var(--body-color)}.user-dropdown{position:absolute;right:0;top:48px;width:220px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 10px 30px rgba(32,44,75,.15);padding:8px;z-index:60}.user-dropdown .dd-head{padding:8px 10px;border-bottom:1px solid var(--border);margin-bottom:6px}.user-dropdown .dd-head strong{display:block}.user-dropdown .dd-head span{font-size:12px;color:var(--body-color)}.user-dropdown button{width:100%;text-align:left;background:none;border:none;padding:8px 10px;cursor:pointer;border-radius:6px;font-size:13px;color:var(--danger)}.user-dropdown button:hover{background:var(--light-bg)}.sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:var(--sidebar-bg);border-right:1px solid var(--border);overflow-y:auto;z-index:55;display:flex;flex-direction:column}.brand-card{padding:18px 20px;border-bottom:1px solid var(--border);gap:12px}.brand-card,.brand-logo{display:flex;align-items:center}.brand-logo{width:42px;height:42px;border-radius:10px;background:var(--primary);color:#fff;justify-content:center;font-size:20px;font-weight:800}.brand-card strong{display:block;font-size:16px}.brand-card span{font-size:12px;color:var(--body-color)}.side-nav{padding:12px 14px;flex:1 1}.nav-section{margin-bottom:14px}.nav-section>p{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--body-color);margin:10px 8px 6px;font-weight:600}.nav-link{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;color:var(--dark);font-size:13.5px;margin-bottom:2px}.nav-link .nav-ico{width:20px;text-align:center}.nav-link:hover{background:var(--light-bg)}.nav-link.active{background:rgba(61,94,225,.1);color:var(--primary);font-weight:600}.sidebar-foot{padding:14px 20px;border-top:1px solid var(--border);font-size:12px;color:var(--body-color)}.sidebar-foot strong{display:block;color:var(--dark);font-size:13px}.menu-toggle{display:none;background:none;border:none;font-size:20px;cursor:pointer}@media (max-width:991px){.sidebar{transform:translateX(-100%);transition:transform .2s}.sidebar.open{transform:translateX(0);box-shadow:0 0 40px rgba(0,0,0,.2)}.main-area,.topbar{margin-left:0;left:0}.menu-toggle,.topbar .logo-text{display:block}.user-chip .user-meta,.year-pill{display:none}}.page-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page-header h2{font-size:22px}.page-subtitle{color:var(--body-color);margin:4px 0 0;font-size:13px}.page-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-bottom:20px}.card h3{font-size:16px;margin-bottom:12px}.grid{display:grid;grid-gap:20px;gap:20px}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}@media (max-width:991px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.stat-tile{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);gap:14px}.stat-ico,.stat-tile{display:flex;align-items:center}.stat-ico{width:48px;height:48px;border-radius:10px;justify-content:center;color:#fff;flex-shrink:0}.stat-ico,.stat-tile h4{font-size:20px}.stat-tile p{margin:2px 0 0;color:var(--body-color);font-size:12.5px}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:13.5px}.table th{text-align:left;background:var(--light-bg);color:var(--dark);font-weight:600;white-space:nowrap}.table td,.table th{padding:10px 12px;border-bottom:1px solid var(--border)}.table td{vertical-align:middle}.table tr:hover td{background:#fbfcfe}.td-actions,.th-actions{text-align:right;white-space:nowrap}.td-actions .btn{margin-left:6px}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:6px;border:1px solid transparent;font-size:13.5px;font-weight:500;cursor:pointer;background:#fff}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-light{background:#fff;border-color:var(--border);color:var(--dark)}.btn-light:hover{background:var(--light-bg)}.btn-success{background:var(--success);color:#fff}.btn-danger-light{background:rgba(232,38,70,.08);color:var(--danger)}.btn-sm{padding:5px 10px;font-size:12.5px}input,select,textarea{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:6px;font-size:13.5px;font-family:inherit;color:var(--dark);background:#fff;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(61,94,225,.12)}input[type=checkbox],input[type=radio]{width:auto}.search-input{width:220px}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px}@media (max-width:640px){.form-grid{grid-template-columns:1fr}}.field,.field>span{display:block}.field>span{font-size:12.5px;font-weight:500;margin-bottom:6px;color:var(--dark)}.field-span{grid-column:1/-1}.password-wrap{position:relative}.password-wrap input{padding-right:64px}.password-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--primary);font-size:12px;cursor:pointer;font-weight:600}.chip{display:inline-block;padding:3px 10px;border-radius:24px;font-size:11.5px;font-weight:600;background:var(--light-bg);color:var(--dark)}.chip-success{background:rgba(26,190,23,.12);color:#128a10}.chip-warning{background:rgba(234,179,0,.16);color:#997a00}.chip-danger{background:rgba(232,38,70,.1);color:var(--danger)}.chip-info{background:rgba(15,101,205,.1);color:var(--info)}.chip-primary{background:rgba(61,94,225,.12);color:var(--primary)}.alert{padding:12px 16px;border-radius:var(--radius);margin-bottom:16px;font-size:13.5px}.alert-danger{background:rgba(232,38,70,.08);color:var(--danger);border:1px solid rgba(232,38,70,.25)}.alert-success{background:rgba(26,190,23,.08);color:#128a10;border:1px solid rgba(26,190,23,.25)}.alert-warning{background:rgba(234,179,0,.1);color:#7a6200;border:1px solid rgba(234,179,0,.3)}.empty-state{text-align:center;color:var(--body-color);padding:28px 12px}.modal-backdrop{position:fixed;inset:0;background:rgba(32,44,75,.45);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}.modal-card{background:#fff;border-radius:12px;width:100%;max-width:560px;box-shadow:0 20px 50px rgba(0,0,0,.25)}.modal-wide{max-width:860px}.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border)}.icon-btn,.modal-head h3{font-size:16px}.icon-btn{background:none;border:none;cursor:pointer;color:var(--body-color)}.modal-body{padding:20px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.progress{height:8px;background:var(--light-bg);border-radius:6px;overflow:hidden;min-width:90px}.progress>div{height:100%;background:var(--success);border-radius:6px}.progress>div.low{background:var(--danger)}.progress>div.mid{background:var(--warning)}.status-group{display:inline-flex;gap:4px;flex-wrap:wrap}.status-btn{padding:5px 10px;border-radius:24px;border:1px solid var(--border);background:#fff;font-size:12px;cursor:pointer}.status-btn.sel-Present{background:var(--success);color:#fff;border-color:var(--success)}.status-btn.sel-Absent{background:var(--danger);color:#fff;border-color:var(--danger)}.status-btn.sel-Late{background:var(--warning);color:#fff;border-color:var(--warning)}.status-btn.sel-Excused{background:var(--info);color:#fff;border-color:var(--info)}.login-shell{min-height:100vh;display:flex}.login-brand{flex:1 1;background:linear-gradient(135deg,var(--primary) 0,#27439f 100%);color:#fff;display:flex;flex-direction:column;justify-content:center;padding:60px;position:relative;overflow:hidden}.login-brand h1{color:#fff;font-size:42px;font-weight:800}.login-brand .brand-sub{color:hsla(0,0%,100%,.85);font-size:16px;margin-top:12px;max-width:440px}.login-brand .brand-points{margin-top:30px;display:grid;grid-gap:10px;gap:10px;color:hsla(0,0%,100%,.9);font-size:14px}.login-panel{flex:1 1;display:flex;align-items:center;justify-content:center;padding:40px 24px;background:#fff}.login-form{width:100%;max-width:400px}.login-form h2{font-size:24px;margin-bottom:6px}.login-form .login-sub{color:var(--body-color);margin-bottom:24px;font-size:13.5px}.login-form .field{margin-bottom:16px}.login-logo{font-size:26px;font-weight:800;color:var(--primary);margin-bottom:28px}@media (max-width:860px){.login-brand{display:none}}.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:12px 20px;gap:12px 20px}@media (max-width:860px){.detail-grid{grid-template-columns:1fr 1fr}}.detail-grid p{margin:0}.detail-grid span{display:block;font-size:11.5px;color:var(--body-color);text-transform:uppercase;letter-spacing:.04em}.detail-grid strong{font-size:14px}.tabs{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}.tab-btn{padding:8px 16px;border-radius:24px;border:1px solid var(--border);background:#fff;cursor:pointer;font-size:13px;font-weight:500}.tab-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}.timetable-grid{display:grid;grid-template-columns:repeat(5,1fr);grid-gap:12px;gap:12px}@media (max-width:1100px){.timetable-grid{grid-template-columns:1fr 1fr}}.tt-day h4{font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--body-color);margin-bottom:8px}.tt-entry{background:var(--light-bg);border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:6px;padding:8px 10px;margin-bottom:8px;font-size:12.5px}.tt-entry strong{display:block;font-size:13px}.tt-entry span{color:var(--body-color)}.perm-table td,.perm-table th{text-align:center}.perm-table td:first-child,.perm-table th:first-child{text-align:left}