:root{--bg: #f1f5f9;--surface: #ffffff;--text: #0f172a;--muted: #64748b;--border: #e2e8f0;--primary: #2563eb;--primary-hover: #1d4ed8;--danger: #dc2626;--sidebar: #0f172a;--sidebar-text: #cbd5e1;--radius: 12px;--shadow: 0 10px 30px rgba(15, 23, 42, .08);font-family:Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.5;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0;min-height:100vh}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,p{margin:0}button,input,select,textarea{font:inherit}.app-shell{display:flex;min-height:100vh}.sidebar{width:260px;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;padding:24px 16px}.brand{display:flex;gap:12px;align-items:center;margin-bottom:32px;padding:0 8px}.brand strong{display:block;color:#fff;font-size:.95rem}.brand small{color:#94a3b8;font-size:.75rem}.brand-icon{width:42px;height:42px;border-radius:10px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:700}.sidebar-nav{display:flex;flex-direction:column;gap:6px;flex:1}.nav-link{color:var(--sidebar-text);padding:10px 12px;border-radius:8px;text-decoration:none;transition:background .15s}.nav-link:hover,.nav-link.active{background:#ffffff14;color:#fff;text-decoration:none}.sidebar-footer{display:flex;flex-direction:column;gap:12px}.user-chip{padding:10px 12px;background:#ffffff0d;border-radius:8px}.user-chip span{display:block;color:#fff;font-size:.85rem;word-break:break-all}.user-chip small{color:#94a3b8}.main-content{flex:1;padding:32px;overflow:auto}.auth-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(135deg,#dbeafe,#f8fafc,#ede9fe)}.auth-card{width:100%;max-width:420px;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:32px}.auth-header{margin-bottom:24px}.auth-header h1{font-size:1.5rem;margin-bottom:8px}.auth-header p,.auth-footer{color:var(--muted);font-size:.95rem}.auth-footer{margin-top:20px;text-align:center}.form{display:flex;flex-direction:column;gap:16px}.form label{display:flex;flex-direction:column;gap:6px;font-size:.9rem;font-weight:600}.form input,.form select,.form textarea{padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:#fff}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .full-width{grid-column:1 / -1}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.btn{border:none;border-radius:8px;padding:10px 16px;cursor:pointer;font-weight:600;transition:background .15s,opacity .15s}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-secondary{background:#e2e8f0;color:var(--text)}.btn-danger{background:#fee2e2;color:var(--danger)}.btn-sm{padding:6px 10px;font-size:.85rem}.btn-block{width:100%}.btn-icon{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--muted)}.page-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px}.page-header h1{font-size:1.75rem;margin-bottom:6px}.page-header p{color:var(--muted)}.alert{padding:12px 14px;border-radius:8px;margin-bottom:16px;font-size:.95rem}.alert-error{background:#fee2e2;color:#991b1b}.alert-success{background:#dcfce7;color:#166534}.alert-info{background:#dbeafe;color:#1e40af}.loading{display:flex;align-items:center;gap:12px;color:var(--muted);padding:24px 0}.spinner{width:22px;height:22px;border:3px solid #cbd5e1;border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:24px}.stat-card{background:var(--surface);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);border-top:4px solid var(--primary)}.stat-label{color:var(--muted);font-size:.9rem}.stat-value{display:block;font-size:2rem;margin-top:8px}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px}.card{background:var(--surface);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.card h3{margin-bottom:16px;font-size:1.05rem}.highlight-card{margin-bottom:24px;border-left:4px solid var(--primary)}.highlight-card p{margin-top:8px;color:var(--muted)}.simple-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.simple-list li{display:flex;justify-content:space-between;gap:12px;align-items:center;padding-bottom:12px;border-bottom:1px solid var(--border)}.simple-list li:last-child{border-bottom:none;padding-bottom:0}.simple-list small{color:var(--muted);text-align:right}.table-wrap{overflow:auto;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow)}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{padding:14px 16px;text-align:left;border-bottom:1px solid var(--border)}.data-table th{background:#f8fafc;font-size:.85rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.actions-cell{display:flex;gap:8px}.empty-state{color:var(--muted);padding:16px 0}.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:.75rem;font-weight:700;text-transform:capitalize}.badge-success{background:#dcfce7;color:#166534}.badge-warning{background:#fef3c7;color:#92400e}.badge-danger{background:#fee2e2;color:#991b1b}.badge-muted{background:#e2e8f0;color:#475569}.tab-bar{display:flex;gap:8px;margin-bottom:24px;border-bottom:1px solid var(--border);padding-bottom:0}.tab-btn{background:none;border:none;border-bottom:3px solid transparent;padding:12px 18px;cursor:pointer;font-weight:600;color:var(--muted);margin-bottom:-1px;transition:color .15s,border-color .15s}.tab-btn:hover{color:var(--text)}.tab-btn.active{color:var(--primary);border-bottom-color:var(--primary)}.course-list{display:flex;flex-direction:column;gap:20px}.course-card{background:var(--surface);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}.course-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px}.course-card h3{font-size:1.2rem;margin-bottom:6px}.course-meta{color:var(--muted);font-size:.9rem}.course-description{color:var(--muted);margin-bottom:20px;line-height:1.6}.course-progress-pill{flex-shrink:0;background:#dbeafe;color:#1e40af;padding:6px 12px;border-radius:999px;font-size:.8rem;font-weight:700}.course-section{margin-top:20px}.course-section h4{font-size:.95rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:12px}.task-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.task-item{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:14px 16px;border-radius:10px;border:1px solid var(--border);background:#f8fafc}.task-item-main p{margin-top:6px;color:var(--muted);font-size:.9rem}.task-item-meta{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex-shrink:0;text-align:right}.task-item-meta time{font-size:.85rem;color:var(--muted);white-space:nowrap}.task-item.task-overdue{border-left:4px solid var(--danger);background:#fff5f5}.task-item.task-due_soon,.task-item.task-exam_soon{border-left:4px solid #f59e0b;background:#fffbeb}.academic-fields{display:flex;flex-direction:column;gap:16px}.academic-fields label{display:flex;flex-direction:column;gap:6px;font-size:.9rem;font-weight:600}.field-label{display:block;font-size:.9rem;font-weight:600;margin-bottom:8px}.checkbox-list{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--border);border-radius:8px;background:#f8fafc;max-height:200px;overflow:auto}.checkbox-item{display:flex;align-items:center;gap:10px;font-weight:500;cursor:pointer}.checkbox-item input{width:16px;height:16px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:grid;place-items:center;padding:24px;z-index:1000}.modal{width:100%;max-width:640px;max-height:90vh;overflow:auto;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid var(--border)}.modal-body{padding:24px}.detail-list{display:grid;grid-template-columns:120px 1fr;gap:10px 16px}.detail-list dt{color:var(--muted);font-weight:600}.detail-list dd{margin:0}.progress-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:16px}.progress-row{display:flex;justify-content:space-between;margin-bottom:6px}.progress-bar{height:8px;background:#e2e8f0;border-radius:999px;overflow:hidden}.progress-fill{height:100%;background:var(--primary);border-radius:999px}.student-stats .stat-value-text{font-size:1.15rem;line-height:1.3;word-break:break-word}.tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;margin-left:8px;padding:0 6px;border-radius:999px;background:#dbeafe;color:#1e40af;font-size:.75rem;font-weight:700}.card-header-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.card-header-row h3{margin-bottom:0}.subject-chip-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px}.subject-chip{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:#f8fafc}.subject-chip-code{flex-shrink:0;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:4px 8px;border-radius:6px;background:#dbeafe;color:#1e40af}.subject-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px}.subject-card{background:var(--surface);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);border-top:4px solid var(--primary);display:flex;flex-direction:column;gap:10px}.subject-card-top{display:flex;justify-content:space-between;align-items:center;gap:12px}.subject-code{font-size:.8rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#1e40af;background:#dbeafe;padding:4px 10px;border-radius:6px}.subject-credits{font-size:.8rem;font-weight:600;color:var(--muted)}.subject-name{font-size:1.15rem;line-height:1.35}.subject-description{color:var(--muted);font-size:.92rem;line-height:1.55}.subject-meta{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;margin-top:auto;padding-top:12px;border-top:1px solid var(--border);font-size:.88rem}.subject-meta dt{color:var(--muted);font-weight:600}.subject-meta dd{margin:0}.empty-card{text-align:center;padding:40px 24px}.empty-card h3{margin-bottom:10px}@media(max-width:900px){.app-shell{flex-direction:column}.sidebar{width:100%}.form-grid{grid-template-columns:1fr}}
