*{box-sizing:border-box} :root{--ink:#182230;--muted:#718096;--line:#e8edf3;--bg:#f7f9fc;--white:#fff;--primary:#5b5ce2;--primary-light:#eeefff;--green:#18a875;--green-bg:#e5f8f0;--orange:#e99a3d;--orange-bg:#fff3df;--red:#e45858;--red-bg:#ffebeb;--blue:#3584d6;--blue-bg:#eaf3ff} body{margin:0;color:var(--ink);font-family:'DM Sans',sans-serif;background:var(--bg);font-size:14px}.app-shell{display:flex;min-height:100vh}.sidebar{width:250px;background:#fff;border-right:1px solid var(--line);padding:25px 15px;display:flex;flex-direction:column;flex-shrink:0}.brand{display:flex;align-items:center;gap:11px;padding:0 12px;margin-bottom:27px}.brand-mark{height:37px;width:37px;border-radius:11px;background:var(--primary);color:white;display:grid;place-items:center;font-size:17px;box-shadow:0 7px 14px #5b5ce230}.brand strong{display:block;font:800 18px 'Plus Jakarta Sans';letter-spacing:-.6px}.brand small{display:block;color:#99a3b3;font-size:10px;margin-top:2px}.school-switcher{display:flex;align-items:center;gap:9px;padding:10px;background:#fafbfe;border:1px solid var(--line);border-radius:12px;margin-bottom:24px}.school-avatar{background:#ffe6d6;color:#d66b37;width:31px;height:31px;border-radius:9px;display:grid;place-items:center;font-size:11px;font-weight:700}.school-switcher b{font-size:11px;display:block}.school-switcher span{display:block;color:#9aa4b2;font-size:9px;margin-top:3px}.school-switcher>i{font-size:10px;color:#aab1bd;margin-left:auto}.nav-label{font-size:10px;color:#a8b0bd;font-weight:700;letter-spacing:1px;margin:18px 12px 8px}.nav-item{border:0;background:transparent;color:#687487;width:100%;display:flex;align-items:center;gap:13px;padding:11px 12px;border-radius:9px;margin:2px 0;text-align:left;cursor:pointer;font:500 13px 'DM Sans';transition:.2s}.nav-item i{width:17px;text-align:center;font-size:15px}.nav-item:hover{background:#f5f6ff;color:var(--primary)}.nav-item.active{background:var(--primary-light);color:var(--primary);font-weight:700}.nav-item em{font-style:normal;font-size:10px;margin-left:auto;color:#a2aabb}.alert-count{background:#fff0f0!important;color:var(--red)!important;border-radius:20px;padding:3px 6px}.sidebar-bottom{margin-top:auto}.profile-mini{border-top:1px solid var(--line);margin-top:15px;padding:17px 8px 0;display:flex;align-items:center;gap:9px}.profile-mini b{font-size:11px;display:block}.profile-mini span{font-size:10px;color:var(--muted);display:block;margin-top:3px}.profile-mini>i{margin-left:auto;color:#a7aeb9}.avatar{height:34px;width:34px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:11px}.purple{background:#dfdcff;color:#5b5ce2}.main-content{flex:1;min-width:0}.topbar{height:75px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 37px}.breadcrumb{display:flex;align-items:center;gap:12px;font-size:13px}.breadcrumb span{color:#9ca7b5}.breadcrumb i{font-size:9px;color:#adb5c0}.breadcrumb strong{font-size:15px}.top-actions{display:flex;align-items:center;gap:20px}.global-search{display:flex;align-items:center;background:#f6f8fb;border:1px solid #eef1f5;border-radius:9px;height:37px;width:245px;color:#a2adba;padding:0 11px;gap:8px}.global-search input{border:0;outline:0;background:transparent;font:12px 'DM Sans';width:100%}.global-search kbd{font:10px 'DM Sans';white-space:nowrap;border:1px solid #dde2e9;border-radius:4px;padding:3px 5px;color:#9ca7b5;background:#fff}.icon-btn{height:36px;width:36px;border:0;background:transparent;position:relative;color:#748092;font-size:17px;cursor:pointer}.notification span{position:absolute;right:5px;top:5px;width:6px;height:6px;border-radius:50%;background:#e95b65;border:1px solid white}.top-profile{display:flex;align-items:center;gap:8px}.top-profile i{font-size:10px;color:#9ca7b5}.content{padding:32px 38px 45px;max-width:1600px;margin:auto}.page-heading{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:27px}.page-heading h1{font:800 25px 'Plus Jakarta Sans';margin:0 0 6px;letter-spacing:-.7px}.page-heading p{color:var(--muted);margin:0;font-size:13px}.heading-actions{display:flex;gap:9px}.btn{border:1px solid var(--line);background:white;padding:10px 15px;border-radius:8px;cursor:pointer;font:600 12px 'DM Sans';color:#526074;display:inline-flex;align-items:center;gap:8px}.btn:hover{border-color:#c8caff}.btn.primary{background:var(--primary);border-color:var(--primary);color:white;box-shadow:0 5px 12px #5b5ce225}.btn.success{background:var(--green);border-color:var(--green);color:#fff}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:19px}.stat-card,.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:19px}.stat-card{position:relative}.stat-top{display:flex;justify-content:space-between;align-items:center;color:#788497;font-size:12px}.stat-icon{width:35px;height:35px;border-radius:9px;display:grid;place-items:center;font-size:15px}.stat-number{font:800 25px 'Plus Jakarta Sans';margin:15px 0 5px;letter-spacing:-1px}.trend{font-size:11px}.trend.up{color:var(--green)}.trend.down{color:var(--red)}.dashboard-grid{display:grid;grid-template-columns:1.45fr 1fr;gap:19px;margin-bottom:19px}.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:21px}.panel-head h3{font-size:14px;margin:0}.panel-head a,.text-btn{font-size:11px;color:var(--primary);cursor:pointer;border:0;background:none}.chart-area{height:210px;display:flex;align-items:end;gap:10px;padding:0 5px 22px;border-bottom:1px solid #edf0f4;background:repeating-linear-gradient(to bottom,transparent 0,transparent 51px,#f0f2f6 52px)}.bar-group{height:100%;flex:1;display:flex;align-items:end;gap:4px;position:relative}.bar{flex:1;border-radius:5px 5px 0 0;background:#dfe1ff;min-height:7px}.bar.dark{background:var(--primary)}.bar-label{position:absolute;top:calc(100% + 10px);font-size:10px;color:#9aa4b2;width:100%;text-align:center}.legend{display:flex;gap:18px;margin-top:17px;font-size:11px;color:#8490a1}.legend i{display:inline-block;width:7px;height:7px;border-radius:2px;background:var(--primary);margin-right:6px}.legend i.gray{background:#dfe1ff}.attendance-ring{display:flex;align-items:center;justify-content:center;height:195px;position:relative}.ring{width:155px;height:155px;border-radius:50%;background:conic-gradient(var(--green) 0 88%,#edf1f4 88% 100%);display:grid;place-items:center}.ring:after{content:'';width:115px;height:115px;background:#fff;border-radius:50%}.ring-center{position:absolute;text-align:center}.ring-center b{font:800 25px 'Plus Jakarta Sans';display:block}.ring-center span{font-size:10px;color:#8994a3}.attendance-footer{border-top:1px solid var(--line);padding-top:15px;display:flex;justify-content:space-around;text-align:center}.attendance-footer b{display:block;font-size:13px}.attendance-footer span{font-size:10px;color:#8d98a6}.recent-list{display:flex;flex-direction:column;gap:14px}.recent-row{display:flex;align-items:center;gap:10px}.recent-row .avatar{width:32px;height:32px;font-size:10px}.recent-row div:nth-child(2){flex:1}.recent-row b{font-size:11px;display:block}.recent-row span{font-size:10px;color:#9aa4b0}.status{font-size:10px;border-radius:20px;padding:5px 8px;font-weight:600;display:inline-block}.status.paid,.status.present,.status.active{color:var(--green);background:var(--green-bg)}.status.pending,.status.late{color:#cc831f;background:var(--orange-bg)}.status.absent,.status.overdue{color:var(--red);background:var(--red-bg)}.table-panel{padding:0;overflow:hidden}.table-toolbar{padding:18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px}.table-toolbar h3{margin:0;font-size:14px}.filter-group{display:flex;gap:8px}.select,.table-search{border:1px solid var(--line);border-radius:7px;background:#fff;height:34px;padding:0 10px;color:#667386;font:11px 'DM Sans';outline:none}.table-search{width:190px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;min-width:720px}th{text-align:left;background:#fafbfc;color:#98a2b0;font-size:10px;text-transform:uppercase;letter-spacing:.5px;padding:13px 18px;font-weight:700}td{padding:13px 18px;border-top:1px solid #f0f2f5;font-size:12px;color:#536174}td strong{color:var(--ink);font-size:12px}.person{display:flex;align-items:center;gap:10px}.person .avatar{width:31px;height:31px;font-size:10px}.action-btn{border:0;background:transparent;color:#8b97a6;cursor:pointer;margin-right:5px}.action-btn:hover{color:var(--primary)}.empty{padding:45px;text-align:center;color:#9aa5b4}.empty i{font-size:27px;margin-bottom:12px;color:#ccd2db}.class-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.class-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px}.class-card-head{display:flex;justify-content:space-between}.class-badge{height:38px;width:38px;display:grid;place-items:center;border-radius:10px;background:var(--primary-light);color:var(--primary);font-weight:700}.class-card h3{margin:14px 0 4px;font-size:16px}.class-card p{color:var(--muted);font-size:11px;margin:0}.progress{height:6px;border-radius:10px;background:#edf0f4;margin:18px 0 8px;overflow:hidden}.progress i{display:block;background:var(--primary);height:100%;border-radius:inherit}.class-foot{display:flex;justify-content:space-between;color:#8994a2;font-size:10px}.timetable{overflow:auto}.schedule{min-width:850px;display:grid;grid-template-columns:80px repeat(5,1fr);border:1px solid var(--line);background:white;border-radius:11px;overflow:hidden}.schedule>div{min-height:72px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:9px}.schedule .day{background:#fafbfc;text-align:center;min-height:45px;font-size:11px;font-weight:700;color:#596679}.schedule .time{font-size:10px;color:#a1aab6;text-align:center}.lesson{margin:-2px;padding:8px;border-radius:7px;background:#eef0ff;color:#5559c9;font-size:10px;height:54px}.lesson.green{background:#e6f7ef;color:#18895f}.lesson.orange{background:#fff1dc;color:#c57a20}.lesson b{display:block;font-size:10px;margin-bottom:4px}.lesson span{font-size:9px}.modal-backdrop{position:fixed;inset:0;background:#17223880;display:none;place-items:center;z-index:5;padding:20px}.modal-backdrop.show{display:grid}.modal{width:440px;max-width:100%;background:white;border-radius:14px;padding:24px;box-shadow:0 20px 70px #18223030}.modal h2{margin:0 0 20px;font:700 18px 'Plus Jakarta Sans'}.modal-close{float:right;border:0;background:none;font-size:20px;color:#8490a0;cursor:pointer}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.field{display:flex;flex-direction:column;gap:6px}.field.full{grid-column:1/-1}.field label{font-size:11px;color:#667386;font-weight:600}.field input,.field select{height:38px;border:1px solid var(--line);border-radius:7px;padding:0 10px;outline:0;font:12px 'DM Sans'}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:23px}.toast{position:fixed;right:25px;bottom:25px;background:#182230;color:white;padding:13px 17px;border-radius:8px;display:flex;align-items:center;gap:9px;font-size:12px;transform:translateY(90px);opacity:0;transition:.3s;z-index:10}.toast.show{transform:translateY(0);opacity:1}.toast i{color:#4cda9b}.mobile-menu{display:none;border:0;background:transparent;font-size:18px;color:#586579}@media(max-width:1050px){.sidebar{width:215px}.content{padding:25px}.stats-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.class-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.sidebar{position:fixed;left:-260px;top:0;bottom:0;z-index:4;transition:.25s;width:250px;box-shadow:10px 0 30px #1112}.sidebar.open{left:0}.mobile-menu{display:block}.topbar{padding:0 16px}.breadcrumb{margin-left:10px}.top-actions{gap:6px}.global-search{width:37px;padding:0 11px}.global-search input,.global-search kbd{display:none}.content{padding:22px 15px}.page-heading{display:block}.heading-actions{margin-top:16px}.stats-grid{gap:10px}.stat-card{padding:14px}.stat-number{font-size:21px}.class-grid{grid-template-columns:1fr}.top-profile{display:none}.page-heading h1{font-size:21px}.table-toolbar{display:block}.filter-group{margin-top:12px}.table-search{width:100%}.filter-group .select{flex:1}}