:root{--navy:#082155;--navy-hover:#1a3a7a;--lime:#acd21e;--lime-dark:#8aab18;--bg:#f0f4f8;--border:#e5e7eb;--text:#1a202c;--text-muted:#6b7280;--text-faint:#9ca3af;--danger:#dc2626;--success:#15803d;--warning:#a16207;--info:#0369a1;--sidebar-w:208px;--mobile-header-h:52px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text)}.btn{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem 1rem;border-radius:.5rem;font-weight:600;font-size:.875rem;line-height:1.25rem;transition:all .15s ease;cursor:pointer;border:none;text-decoration:none}.btn-primary{background-color:var(--navy);color:#fff}.btn-primary:hover{background-color:var(--navy-hover)}.btn-lime{background-color:var(--lime);color:var(--navy)}.btn-lime:hover{background-color:var(--lime-dark)}.btn-outline{background-color:transparent;border:1px solid var(--border);color:#4b5563}.btn-outline:hover{border-color:var(--navy);color:var(--navy)}.btn-danger{background-color:#fef2f2;color:var(--danger);border:1px solid #fecaca}.btn-danger:hover{background-color:#fee2e2}.btn-success{background-color:#f0fdf4;color:var(--success);border:1px solid #bbf7d0}.btn-success:hover{background-color:#dcfce7}.btn-sm{padding:.25rem .625rem;font-size:.75rem}.card{background-color:#fff;border-radius:.75rem;border:1px solid var(--border);padding:1.25rem}.card-title{font-size:.875rem;font-weight:700;color:#1f2937}.badge{display:inline-flex;align-items:center;padding:.125rem .625rem;border-radius:9999px;font-size:.75rem;font-weight:700}.badge-navy{background-color:#eff6ff;color:var(--navy)}.badge-lime{background-color:rgba(172,210,30,.2);color:var(--lime-dark)}.badge-success{background-color:#dcfce7;color:var(--success)}.badge-warning{background-color:#fef9c3;color:var(--warning)}.badge-danger{background-color:#fee2e2;color:var(--danger)}.badge-info{background-color:#e0f2fe;color:var(--info)}.badge-gray{background-color:#f3f4f6;color:#4b5563}.badge-teal{background-color:#f0fdfa;color:#0d9488}.form-group{margin-bottom:.875rem}.form-label{display:block;font-size:.75rem;font-weight:700;color:#4b5563;margin-bottom:.25rem}.form-input{width:100%;padding:.5rem .75rem;border:1.5px solid var(--border);border-radius:.5rem;font-size:.875rem;transition:border-color .15s;outline:none;background:#fff;color:#111827}.form-input:focus{border-color:var(--navy)}.form-select{width:100%;padding:.5rem .75rem;border:1.5px solid var(--border);border-radius:.5rem;font-size:.875rem;outline:none;background:#fff;color:#111827}.form-select:focus{border-color:var(--navy)}.alert{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:.5rem;font-size:.875rem;margin-bottom:1rem;border:1px solid transparent}.alert-success{background-color:#f0fdf4;color:var(--success);border-color:#bbf7d0}.alert-warning{background-color:#fefce8;color:var(--warning);border-color:#fef08a}.alert-error{background-color:#fef2f2;color:#b91c1c;border-color:#fecaca}.alert-info{background-color:#f0f9ff;color:var(--info);border-color:#bae6fd}.stat-card{background-color:#f9fafb;border-radius:.5rem;padding:1rem;border:1px solid var(--border)}.stat-label{font-size:.75rem;font-weight:600;color:var(--text-faint);margin-bottom:.25rem}.stat-value{font-size:1.5rem;font-weight:800;color:var(--navy)}.progress-bar{height:.375rem;background-color:var(--border);border-radius:9999px;overflow:hidden}.progress-fill{height:100%;background-color:var(--lime);border-radius:9999px;transition:all .5s ease}.nav-item{display:flex;align-items:center;gap:.625rem;padding:.625rem .75rem;color:hsla(0,0%,100%,.7);font-size:.875rem;border-radius:.5rem;margin:0 .25rem;cursor:pointer;transition:all .15s ease;background:none;border:none;width:calc(100% - .5rem);text-align:left}.nav-item:hover{background-color:hsla(0,0%,100%,.1);color:#fff}.nav-item.active{background-color:var(--lime);color:var(--navy);font-weight:700}.table-container{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:.875rem}thead th{text-align:left;font-size:.625rem;font-weight:700;color:var(--text-faint);text-transform:uppercase;letter-spacing:.025em;border-bottom:1px solid var(--border);background-color:#f9fafb}tbody td,thead th{padding:.625rem .75rem}tbody td{border-bottom:1px solid #f3f4f6;color:#1f2937;vertical-align:middle}tbody tr:hover td{background-color:#f9fafb}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:50;padding:1rem}.modal{background-color:#fff;border-radius:.75rem;padding:1.5rem;width:100%;max-width:32rem;max-height:90vh;overflow-y:auto}.modal-title{font-size:1rem;font-weight:800;color:var(--navy);margin-bottom:1.25rem;display:flex;align-items:center;gap:.5rem}.modal-footer{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border)}.hidden{display:none}.app-shell{height:100dvh}.app-main,.app-shell{display:flex;overflow:hidden}.app-main{flex:1 1;min-width:0}.app-main,.sidebar{flex-direction:column}.sidebar{width:var(--sidebar-w);flex-shrink:0;display:flex;overflow-y:auto;background:var(--navy)}.mobile-header,.sidebar-overlay{display:none}.page{flex:1 1;overflow-y:auto;padding:24px}.page-header{justify-content:space-between;gap:12px;margin-bottom:16px}.page-header,.toolbar{display:flex;align-items:center;flex-wrap:wrap}.toolbar{gap:8px}.grid-auto{display:grid;grid-gap:14px;gap:14px;grid-template-columns:repeat(auto-fill,minmax(min(100%,var(--grid-min,260px)),1fr))}.stat-grid{grid-template-columns:repeat(4,1fr)}.stat-grid,.stat-row{display:grid;grid-gap:12px;gap:12px}.stat-row{grid-template-columns:repeat(var(--cols,4),1fr)}.grid-2{display:grid;grid-gap:16px;gap:16px;grid-template-columns:repeat(2,1fr)}.week-grid-scroll{overflow-x:auto}.week-grid .time-col{position:-webkit-sticky;position:sticky;left:0;z-index:2}.spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--navy);border-radius:50%;animation:spin .8s linear infinite;margin:32px auto}@keyframes spin{to{transform:rotate(1turn)}}.empty-state{text-align:center;padding:40px 20px;background:#f9fafb;border:1px dashed #d1d5db;border-radius:12px}.empty-state-icon{font-size:2rem;margin-bottom:10px}.empty-state-title{font-size:.95rem;font-weight:700;color:#1f2937;margin-bottom:6px}.empty-state-text{font-size:.82rem;color:var(--text-muted);max-width:380px;margin:0 auto}.toast-container{position:fixed;bottom:16px;right:16px;z-index:1000;display:flex;flex-direction:column;gap:8px;max-width:min(360px,calc(100vw - 32px))}.toast{padding:12px 16px;border-radius:10px;font-size:.875rem;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,.18);display:flex;align-items:center;gap:8px;animation:toast-in .2s ease;border:1px solid transparent}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}.toast-success{background:#f0fdf4;color:var(--success);border-color:#bbf7d0}.toast-error{background:#fef2f2;color:#b91c1c;border-color:#fecaca}.toast-info{background:#f0f9ff;color:var(--info);border-color:#bae6fd}.notif-dropdown{position:fixed;left:calc(var(--sidebar-w) + 8px);top:60px;width:340px;max-height:420px;overflow-y:auto;background:#fff;border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,.25);z-index:999;border:1px solid var(--border)}@media (max-width:1023px){.app-shell{height:auto;min-height:100dvh}.app-main,.app-shell{display:block;overflow:visible}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:200;width:min(280px,85vw);transform:translateX(-100%);transition:transform .2s ease}.sidebar.open{transform:translateX(0)}.sidebar-overlay{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:199}.mobile-header{display:flex;align-items:center;gap:10px;position:-webkit-sticky;position:sticky;top:0;z-index:100;background:var(--navy);color:#fff;padding:8px 12px;min-height:var(--mobile-header-h)}.hamburger{background:none;border:none;color:#fff;font-size:1.4rem;cursor:pointer;padding:8px;line-height:1}.mobile-logo{font-weight:900;font-size:1rem;color:var(--lime);letter-spacing:-.025em}.mobile-logo span{color:hsla(0,0%,100%,.8);font-weight:400}.sidebar .bell-slot{display:none}.page{overflow-y:visible}.stat-grid{grid-template-columns:repeat(2,1fr)}.notif-dropdown{left:8px;right:8px;width:auto;top:calc(var(--mobile-header-h) + 4px)}.modal-overlay{z-index:210}}@media (max-width:767px){.page{padding:12px}.page-header{flex-direction:column;align-items:stretch}.toolbar>*{flex:1 1 140px}.stat-row{grid-template-columns:repeat(2,1fr)}.grid-2{grid-template-columns:1fr}.form-input,.form-select{font-size:16px}.btn,.grade-btn{min-height:44px}.grade-btn{min-width:44px}.btn-sm{min-height:36px}.nav-item{padding:12px}.modal-overlay{padding:0;align-items:stretch}.modal{max-width:100%!important;width:100%!important;max-height:none;min-height:100dvh;border-radius:0;display:flex;flex-direction:column}.modal>*{flex-shrink:0}.modal-footer{position:-webkit-sticky;position:sticky;bottom:0;background:#fff;margin-top:auto;padding-bottom:max(12px,env(safe-area-inset-bottom))}.modal-overlay.confirm-overlay{padding:1rem;align-items:center}.modal.confirm-dialog{max-width:24rem!important;width:100%!important;min-height:0;border-radius:12px}.table-cards table,.table-cards tbody,.table-cards td,.table-cards tr{display:block;width:100%}.table-cards table{min-width:0!important}.table-cards thead{display:none}.table-cards tr{background:#fff;border:1px solid var(--border);border-radius:10px;margin-bottom:10px;padding:8px 12px}.table-cards td{border:none;padding:4px 0;display:flex;align-items:center;gap:8px}.table-cards td:before{content:attr(data-label);font-weight:700;font-size:.68rem;color:var(--text-muted);text-transform:uppercase;min-width:92px;flex-shrink:0}.table-cards td:not([data-label]):before{content:none}}@media (max-width:480px){.stat-grid{grid-template-columns:1fr}}.chat-layout{display:flex;flex:1 1;overflow:hidden}.chat-rooms{width:280px;flex-shrink:0;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.chat-conversation{flex:1 1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.chat-back{display:none}@media (max-width:767px){.chat-layout{height:calc(100dvh - var(--mobile-header-h))}.chat-rooms{width:100%;border-right:none}.chat-layout.conversation-open .chat-rooms,.chat-layout:not(.conversation-open) .chat-conversation{display:none}.chat-back{display:inline-flex}}@media (max-width:1023px){.chat-layout{height:calc(100dvh - var(--mobile-header-h))}}