/* ── Variables ─────────────────────────────── */
:root {
  --primary:       #1a5276;
  --primary-light: #2471a3;
  --primary-pale:  #d6eaf8;
  --accent:        #148f77;
  --accent-light:  #1abc9c;
  --sidebar-w:     260px;
  --topbar-h:      64px;
  --radius:        12px;
  --radius-sm:     8px;
  --shadow:        0 2px 16px rgba(0,0,0,.08);
  --shadow-md:     0 4px 24px rgba(0,0,0,.12);
  --text:          #1c2833;
  --text-muted:    #6c7a89;
  --bg:            #f4f6f9;
  --card-bg:       #ffffff;
  --border:        #e8edf2;
  --success:       #1e8449;
  --danger:        #c0392b;
  --warning:       #d68910;
  --info:          #1a5276;
  --sidebar-bg:    #0f2942;
  --sidebar-text:  #b3c6d6;
  --sidebar-active:#ffffff;
  --sidebar-hover: rgba(255,255,255,.06);
  --transition:    all .2s ease;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Inter', sans-serif; background: var(--bg);
       color: var(--text); font-size: 14px; line-height: 1.6; }
a { text-decoration: none; color: var(--primary); }
a:hover { color: var(--primary-light); }
img { max-width: 100%; }

/* ── Layout ─────────────────────────────────── */
.layout-wrapper { display: flex; min-height: 100vh; }

/* ── Sidebar ────────────────────────────────── */
.sidebar {
  width: var(--sidebar-w);
  background: var(--sidebar-bg);
  display: flex;
  flex-direction: column;
  position: fixed;
  top: 0; left: 0;
  height: 100vh;
  z-index: 1000;
  transition: transform .3s ease;
  overflow-y: auto;
  overflow-x: hidden;
}
.sidebar-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 18px 16px 14px;
  border-bottom: 1px solid rgba(255,255,255,.07);
  min-height: 72px;
}
.sidebar-logo { border-radius: 8px; flex-shrink: 0; }
.sidebar-school-name { flex: 1; overflow: hidden; }
.school-short { display: block; color: #fff; font-weight: 600; font-size: 13px; }
.school-full  { display: block; color: var(--sidebar-text); font-size: 10px; white-space: nowrap;
                overflow: hidden; text-overflow: ellipsis; }
.sidebar-close { background: none; border: none; color: var(--sidebar-text);
                 font-size: 18px; cursor: pointer; padding: 4px; }

.sidebar-user {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  border-bottom: 1px solid rgba(255,255,255,.07);
}
.sidebar-avatar { width: 38px; height: 38px; border-radius: 50%; overflow: hidden;
                  flex-shrink: 0; border: 2px solid rgba(255,255,255,.15); }
.sidebar-avatar img { width: 100%; height: 100%; object-fit: cover; }
.avatar-placeholder {
  width: 100%; height: 100%;
  background: var(--primary-light);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 600;
}
.sidebar-user-name { color: #fff; font-size: 13px; font-weight: 500;
                     white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sidebar-user-role { color: var(--sidebar-text); font-size: 11px; margin-top: 1px; }

.sidebar-nav { list-style: none; padding: 10px 0; flex: 1; }
.sidebar-nav li a,
.sidebar-nav li .nav-link {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 18px;
  color: var(--sidebar-text);
  font-size: 13px;
  border-radius: 0;
  transition: var(--transition);
  cursor: pointer;
  border: none;
  background: none;
  width: 100%;
  text-align: left;
}
.sidebar-nav li a:hover,
.sidebar-nav li .nav-link:hover { background: var(--sidebar-hover); color: #fff; }
.sidebar-nav li a.active,
.sidebar-nav li .nav-link.active {
  background: var(--primary-light);
  color: #fff;
  border-left: 3px solid var(--accent-light);
}
.sidebar-nav li a i,
.sidebar-nav li .nav-link i { width: 18px; font-size: 14px; flex-shrink: 0; }
.sidebar-section-label {
  color: rgba(179,198,214,.5);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 12px 18px 4px;
}
.sidebar-footer { padding: 12px 16px; border-top: 1px solid rgba(255,255,255,.07); }
.sidebar-logout {
  display: flex; align-items: center; gap: 8px;
  color: #e74c3c; font-size: 13px; padding: 8px 4px;
  transition: var(--transition);
}
.sidebar-logout:hover { color: #c0392b; }
.sidebar-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.5);
  z-index: 999;
}

/* ── Main content ───────────────────────────── */
.main-content {
  margin-left: var(--sidebar-w);
  flex: 1;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

/* ── Topbar ─────────────────────────────────── */
.topbar {
  height: var(--topbar-h);
  background: var(--card-bg);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  padding: 0 20px;
  gap: 12px;
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: 0 1px 6px rgba(0,0,0,.06);
}
.topbar-toggle { background: none; border: none; font-size: 18px;
                 color: var(--text); cursor: pointer; display: none; padding: 4px 8px; }
.topbar-title { font-weight: 600; font-size: 16px; flex: 1; }
.topbar-actions { display: flex; align-items: center; gap: 6px; }
.topbar-btn {
  width: 38px; height: 38px;
  border-radius: 10px;
  background: var(--bg);
  border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  color: var(--text); font-size: 16px;
  cursor: pointer; position: relative;
  transition: var(--transition);
}
.topbar-btn:hover { background: var(--primary-pale); color: var(--primary); }
.notif-badge {
  position: absolute; top: 4px; right: 4px;
  width: 16px; height: 16px;
  background: #e74c3c; color: #fff;
  border-radius: 50%; font-size: 9px;
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; border: 1.5px solid #fff;
}

/* ── Notification dropdown ───────────────────── */
.notif-dropdown { width: 320px; border-radius: var(--radius); box-shadow: var(--shadow-md);
                  border: 1px solid var(--border); overflow: hidden; }
.notif-header { display: flex; justify-content: space-between; align-items: center;
                padding: 12px 16px; border-bottom: 1px solid var(--border);
                font-weight: 600; font-size: 13px; }
.notif-mark-read { font-size: 11px; color: var(--primary); }
.notif-list { max-height: 360px; overflow-y: auto; }
.notif-item { display: flex; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--border);
              align-items: flex-start; transition: var(--transition); }
.notif-item:hover { background: var(--bg); }
.notif-item.unread { background: #ebf5fb; }
.notif-icon { width: 32px; height: 32px; border-radius: 50%; flex-shrink: 0;
              display: flex; align-items: center; justify-content: center; font-size: 12px; }
.notif-info    { background: #d6eaf8; color: var(--info); }
.notif-success { background: #d5f5e3; color: var(--success); }
.notif-danger  { background: #fadbd8; color: var(--danger); }
.notif-warning { background: #fef9e7; color: var(--warning); }
.notif-title { font-weight: 600; font-size: 12px; }
.notif-msg   { font-size: 11px; color: var(--text-muted); }
.notif-time  { font-size: 10px; color: var(--text-muted); margin-top: 2px; }
.notif-empty { padding: 24px; text-align: center; color: var(--text-muted); font-size: 13px; }

/* ── Flash messages ─────────────────────────── */
.flash-container { padding: 12px 20px 0; }
.alert { border-radius: var(--radius-sm); font-size: 13px; border: none; }
.alert-success { background: #d5f5e3; color: #1e8449; }
.alert-danger  { background: #fadbd8; color: #c0392b; }
.alert-info    { background: #d6eaf8; color: #1a5276; }
.alert-warning { background: #fef9e7; color: #d68910; }

/* ── Page content ───────────────────────────── */
.page-content { padding: 20px; flex: 1; }

/* ── Cards ──────────────────────────────────── */
.card-modern {
  background: var(--card-bg);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  border: 1px solid var(--border);
  overflow: hidden;
}
.card-modern-header {
  padding: 16px 20px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.card-modern-title { font-weight: 600; font-size: 15px; }
.card-modern-body { padding: 20px; }

/* ── Stat cards (dashboard) ─────────────────── */
.stat-card {
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 20px;
  box-shadow: var(--shadow);
  border: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 16px;
  transition: var(--transition);
}
.stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.stat-icon {
  width: 52px; height: 52px;
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px;
  flex-shrink: 0;
}
.stat-icon.blue   { background: #d6eaf8; color: var(--primary); }
.stat-icon.green  { background: #d5f5e3; color: var(--success); }
.stat-icon.orange { background: #fdebd0; color: #e67e22; }
.stat-icon.red    { background: #fadbd8; color: var(--danger); }
.stat-icon.purple { background: #e8daef; color: #8e44ad; }
.stat-icon.teal   { background: #d1f2eb; color: var(--accent); }
.stat-value { font-size: 26px; font-weight: 700; line-height: 1.1; }
.stat-label { font-size: 12px; color: var(--text-muted); margin-top: 2px; }

/* ── Quick action cards ──────────────────────── */
.action-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 14px; }
.action-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px 14px;
  text-align: center;
  cursor: pointer;
  transition: var(--transition);
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  color: var(--text);
}
.action-card:hover {
  border-color: var(--primary-light);
  background: var(--primary-pale);
  color: var(--primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}
.action-card-icon {
  width: 48px; height: 48px;
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px;
}
.action-card-label { font-size: 12px; font-weight: 500; line-height: 1.3; }

/* ── Forms ──────────────────────────────────── */
.form-label { font-weight: 500; font-size: 13px; margin-bottom: 5px; }
.form-control, .form-select {
  border-radius: var(--radius-sm);
  border: 1px solid var(--border);
  font-size: 13px;
  padding: 9px 12px;
  transition: var(--transition);
}
.form-control:focus, .form-select:focus {
  border-color: var(--primary-light);
  box-shadow: 0 0 0 3px rgba(36,113,163,.12);
  outline: none;
}

/* ── Input with icon ─────────────────────────── */
.input-icon-wrap { position: relative; }
.input-icon {
  position: absolute;
  left: 14px; top: 50%;
  transform: translateY(-50%);
  color: var(--text-muted);
  font-size: 14px;
  pointer-events: none;
}
.input-eye {
  position: absolute;
  right: 12px; top: 50%;
  transform: translateY(-50%);
  background: none; border: none;
  color: var(--text-muted); cursor: pointer; font-size: 14px;
}

/* ── Buttons ────────────────────────────────── */
.btn { border-radius: var(--radius-sm); font-size: 13px; font-weight: 500;
       padding: 9px 18px; transition: var(--transition); }
.btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; }
.btn-primary:hover { background: var(--primary-light); border-color: var(--primary-light); }
.btn-success { background: var(--success); border-color: var(--success); color: #fff; }
.btn-danger  { background: var(--danger);  border-color: var(--danger);  color: #fff; }
.btn-outline-primary { border-color: var(--primary); color: var(--primary); }
.btn-outline-primary:hover { background: var(--primary); color: #fff; }
.btn-sm { padding: 6px 12px; font-size: 12px; }

/* ── Badges ─────────────────────────────────── */
.badge-status {
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 11px;
  font-weight: 600;
  display: inline-block;
}
.badge-pending  { background: #fef9e7; color: #d68910; }
.badge-approved { background: #d5f5e3; color: #1e8449; }
.badge-rejected { background: #fadbd8; color: #c0392b; }
.badge-verified { background: #d6eaf8; color: #1a5276; }
.badge-active   { background: #d5f5e3; color: #1e8449; }

/* ── Tables ─────────────────────────────────── */
.table-modern { width: 100%; border-collapse: collapse; font-size: 13px; }
.table-modern th {
  background: var(--bg); padding: 10px 14px;
  text-align: left; font-weight: 600; font-size: 12px;
  color: var(--text-muted); text-transform: uppercase;
  letter-spacing: .04em; border-bottom: 2px solid var(--border);
}
.table-modern td { padding: 12px 14px; border-bottom: 1px solid var(--border); }
.table-modern tr:hover td { background: var(--bg); }
.table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* ── Auth pages ─────────────────────────────── */
.auth-wrapper { display: flex; min-height: 100vh; }
.auth-left {
  flex: 1;
  background: linear-gradient(135deg, #0f2942 0%, #1a5276 60%, #148f77 100%);
  display: flex; align-items: center; justify-content: center;
  padding: 40px;
}
.auth-left-content { max-width: 380px; text-align: center; }
.auth-left h1 { color: #fff; font-size: 26px; font-weight: 700; margin-bottom: 12px; line-height: 1.3; }
.auth-left p  { color: rgba(255,255,255,.75); font-size: 14px; margin-bottom: 24px; }
.auth-features { text-align: left; display: flex; flex-direction: column; gap: 10px; }
.auth-feature-item {
  display: flex; align-items: center; gap: 10px;
  color: rgba(255,255,255,.85); font-size: 13px;
}
.auth-feature-item i { color: var(--accent-light); font-size: 16px; width: 20px; }

.auth-right {
  width: 520px;
  display: flex; align-items: center; justify-content: center;
  padding: 32px 24px;
  background: var(--bg);
  overflow-y: auto;
}
.auth-card {
  width: 100%; max-width: 420px;
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 36px 32px;
  box-shadow: var(--shadow-md);
}
.auth-card-header { margin-bottom: 24px; }
.auth-card-header h2 { font-size: 22px; font-weight: 700; margin-bottom: 4px; }
.auth-card-header p  { color: var(--text-muted); font-size: 13px; }
.auth-submit { height: 46px; font-size: 14px; font-weight: 600;
               background: var(--primary); border-color: var(--primary); }
.auth-submit:hover { background: var(--primary-light); border-color: var(--primary-light); }
.auth-footer-links { text-align: center; margin-top: 18px; font-size: 13px; color: var(--text-muted); }
.auth-footer-links a { color: var(--primary); font-weight: 500; margin-left: 4px; }

/* Student fields card inside register form */
.student-fields-card {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px;
}
.student-fields-title { font-weight: 600; font-size: 13px; margin-bottom: 12px;
                        color: var(--primary); }

/* ── Waiting screen ─────────────────────────── */
.waiting-wrapper {
  min-height: 100vh;
  background: #fff;
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
}
.waiting-card {
  max-width: 420px;
  text-align: center;
  padding: 40px 32px;
  background: #fff;
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
}
.waiting-icon {
  width: 72px; height: 72px;
  border-radius: 50%;
  background: #fef9e7;
  color: #d68910;
  display: flex; align-items: center; justify-content: center;
  font-size: 30px;
  margin: 0 auto 16px;
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%,100% { transform: scale(1); }
  50%      { transform: scale(1.08); }
}
.waiting-title { font-size: 20px; font-weight: 700; margin-bottom: 10px; }
.waiting-msg   { color: var(--text-muted); font-size: 13px; line-height: 1.7; margin-bottom: 24px; }

.waiting-steps { display: flex; align-items: center; justify-content: center; gap: 0; }
.wstep { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.wstep-icon {
  width: 36px; height: 36px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 14px;
  background: var(--border); color: var(--text-muted);
  border: 2px solid var(--border);
}
.wstep.done  .wstep-icon { background: #d5f5e3; color: var(--success); border-color: var(--success); }
.wstep.active .wstep-icon { background: #fef9e7; color: #d68910;     border-color: #d68910; }
.wstep-label { font-size: 11px; color: var(--text-muted); font-weight: 500; text-align: center; }
.wstep-line { width: 40px; height: 2px; background: var(--border); margin-bottom: 20px; }

/* ── Approval view modal section ─────────────── */
.approval-preview {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px;
  margin-bottom: 16px;
}
.approval-preview-label { font-size: 11px; color: var(--text-muted);
                           text-transform: uppercase; letter-spacing: .05em; margin-bottom: 2px; }
.approval-preview-value { font-size: 13px; font-weight: 500; }

/* ── Responsive ─────────────────────────────── */
@media (max-width: 991px) {
  .sidebar { transform: translateX(-100%); }
  .sidebar.open { transform: translateX(0); }
  .sidebar-overlay.open { display: block; }
  .main-content { margin-left: 0; }
  .topbar-toggle { display: flex; }
  .auth-left { display: none; }
  .auth-right { width: 100%; }
  .auth-card { padding: 28px 20px; }
}
@media (max-width: 576px) {
  .page-content { padding: 14px; }
  .stat-value { font-size: 22px; }
  .action-grid { grid-template-columns: repeat(3, 1fr); }
  .action-card { padding: 14px 8px; }
  .action-card-icon { width: 40px; height: 40px; font-size: 17px; }
}

/* ── Welcome banner ─────────────────────────── */
.welcome-banner {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 18px 22px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  box-shadow: var(--shadow);
}
.welcome-banner h4 { font-size: 17px; font-weight: 600; margin-bottom: 3px; }
.welcome-banner p  { color: var(--text-muted); font-size: 13px; margin: 0; }
.welcome-date { font-size: 12px; color: var(--text-muted); white-space: nowrap; }

/* ── Empty state ─────────────────────────────── */
.empty-state {
  text-align: center;
  padding: 32px 16px;
  color: var(--text-muted);
}
.empty-state i   { font-size: 36px; opacity: .3; display: block; margin-bottom: 10px; }
.empty-state p   { font-size: 13px; margin: 0; }

/* ── Announcement items ──────────────────────── */
.announcement-item {
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.announcement-item:last-child { border-bottom: none; padding-bottom: 0; }
.ann-title { font-size: 13px; font-weight: 500; margin-bottom: 2px; }
.ann-meta  { font-size: 11px; color: var(--text-muted); }

/* ── Overview items (principal) ──────────────── */
.overview-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.overview-item:last-child { border-bottom: none; }

/* ── Sidebar badge ───────────────────────────── */
.sidebar-badge {
  background: #e74c3c;
  color: #fff;
  border-radius: 10px;
  padding: 1px 7px;
  font-size: 10px;
  font-weight: 700;
  margin-left: auto;
}
/* ── Student banner ──────────────────────────── */
.student-banner {
  background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
  border-radius: var(--radius);
  padding: 20px 24px;
  display: flex;
  align-items: center;
  gap: 16px;
  color: #fff;
  box-shadow: var(--shadow-md);
}
.student-banner-avatar {
  width: 60px; height: 60px;
  border-radius: 50%;
  overflow: hidden;
  border: 3px solid rgba(255,255,255,.3);
  flex-shrink: 0;
}
.student-banner-avatar img { width: 100%; height: 100%; object-fit: cover; }
.student-banner-info h4 { font-size: 17px; font-weight: 700; margin-bottom: 4px; color: #fff; }
.student-banner-meta { display: flex; flex-wrap: wrap; gap: 12px; font-size: 12px;
                       color: rgba(255,255,255,.8); }
.student-banner-status { margin-left: auto; flex-shrink: 0; }

/* ── Registration steps ──────────────────────── */
.reg-steps {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0;
  margin: 8px 0;
}
.reg-step { display: flex; flex-direction: column; align-items: center; gap: 5px; }
.reg-step-icon {
  width: 38px; height: 38px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 14px;
  background: var(--border);
  color: var(--text-muted);
  border: 2px solid var(--border);
}
.reg-step.done     .reg-step-icon { background: #d5f5e3; color: var(--success); border-color: var(--success); }
.reg-step.active   .reg-step-icon { background: #d6eaf8; color: var(--primary); border-color: var(--primary); }
.reg-step.rejected .reg-step-icon { background: #fadbd8; color: var(--danger);  border-color: var(--danger); }
.reg-step-label { font-size: 10px; color: var(--text-muted); font-weight: 500; }
.reg-step-line { width: 32px; height: 2px; background: var(--border); margin-bottom: 22px; }

/* ── Profile page ────────────────────────────── */
.profile-photo-wrap { width: 100px; height: 100px; margin: 0 auto; }
.profile-photo { width: 100px; height: 100px; border-radius: 50%; object-fit: cover;
                 border: 3px solid var(--border); }
.profile-photo-placeholder {
  width: 100px; height: 100px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 30px; font-weight: 700;
  margin: 0 auto;
}
.profile-info-row {
  display: flex;
  justify-content: space-between;
  padding: 8px 0;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.profile-info-row:last-child { border-bottom: none; }
.profile-info-row span { color: var(--text-muted); }

/* ── Table avatar ────────────────────────────── */
.table-avatar { width: 32px; height: 32px; border-radius: 50%; overflow: hidden; flex-shrink: 0; }
.table-avatar img { width: 100%; height: 100%; object-fit: cover; }

/* ── Progress bar ────────────────────────────── */
.progress { background: var(--border); }

/* ── Mobile tweaks ───────────────────────────── */
@media (max-width: 576px) {
  .student-banner { flex-wrap: wrap; }
  .student-banner-status { margin-left: 0; }
  .welcome-banner { flex-direction: column; align-items: flex-start; gap: 6px; }
  .reg-step-line { width: 20px; }
}

/* ── Checklist row ───────────────────────────── */
.checklist-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
  gap: 10px;
}
.checklist-row:last-child { border-bottom: none; }
.checklist-item-name { flex: 1; font-size: 13px; }
.checklist-controls { display: flex; gap: 6px; align-items: center; flex-shrink: 0; }
.fw-500 { font-weight: 500; }

/* ── Fee display ─────────────────────────────── */
.fee-display {
  text-align: center;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px;
}
.fee-total { font-size: 28px; font-weight: 700; color: var(--primary); }
.fee-label { font-size: 12px; color: var(--text-muted); }

/* ── Checklist edit ──────────────────────────── */
.checklist-edit-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  border-bottom: 1px solid var(--border);
}
.checklist-edit-row:last-child { border-bottom: none; }

/* ── Sem status label ────────────────────────── */
.sem-status-label {
  background: var(--primary-pale);
  color: var(--primary);
  border-radius: var(--radius-sm);
  padding: 8px 14px;
  font-size: 13px;
  font-weight: 600;
  display: inline-block;
}

/* ── Percent bar ─────────────────────────────── */
.percent-bar {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 10px 14px;
}

/* ── Upload zone ─────────────────────────────── */
.upload-zone {
  border: 2px dashed var(--border);
  border-radius: var(--radius-sm);
  padding: 28px 20px;
  text-align: center;
  cursor: pointer;
  transition: var(--transition);
  background: var(--bg);
}
.upload-zone:hover {
  border-color: var(--primary-light);
  background: var(--primary-pale);
}
.upload-zone-icon { font-size: 28px; color: var(--text-muted); margin-bottom: 8px; }
.upload-zone-text { font-size: 13px; font-weight: 500; margin-bottom: 4px; }
.upload-zone-hint { font-size: 11px; color: var(--text-muted); }
.upload-zone-filename { font-size: 12px; color: var(--accent); font-weight:500; margin-top:6px; }

/* ── Mode toggle ─────────────────────────────── */
.mode-toggle { display: flex; gap: 0; border: 1px solid var(--border);
               border-radius: var(--radius-sm); overflow: hidden; }
.mode-btn {
  flex: 1;
  padding: 10px 16px;
  border: none;
  background: var(--bg);
  color: var(--text-muted);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: var(--transition);
}
.mode-btn.active { background: var(--primary); color: #fff; }
.mode-btn:hover:not(.active) { background: var(--primary-pale); color: var(--primary); }

/* ── Total display ───────────────────────────── */
.total-display {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 9px 12px;
  font-weight: 600;
  font-size: 15px;
  min-height: 42px;
  display: flex;
  align-items: center;
}

/* ── Grade row ───────────────────────────────── */
.grade-row {
  display: flex;
  align-items: center;
  padding: 10px 16px;
  border-bottom: 1px solid var(--border);
  gap: 12px;
  font-size: 13px;
}
.grade-row:last-child { border-bottom: none; }
.grade-range  { color: var(--text-muted); width: 60px; font-size:12px; }
.grade-letter { font-size: 18px; font-weight: 700; width: 36px; }
.grade-remark { font-weight: 500; }

/* ── Set fees table ──────────────────────────── */
.fees-grid { display: grid; gap: 12px; }
.fee-row {
  display: flex; align-items: center;
  gap: 12px; padding: 12px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 13px;
}

/* ── Quiz grid ───────────────────────────────── */
.quiz-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 16px;
}
.quiz-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  display: flex; flex-direction: column;
  transition: var(--transition);
  overflow: hidden;
}
.quiz-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.quiz-card-header {
  padding: 14px 16px;
  display: flex; align-items: center; gap: 10px;
  border-bottom: 1px solid var(--border);
  background: var(--bg);
}
.quiz-card-icon {
  width: 36px; height: 36px;
  border-radius: 10px;
  background: var(--primary-pale);
  color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  font-size: 16px; flex-shrink: 0;
}
.quiz-card-meta { flex: 1; overflow: hidden; }
.quiz-card-course {
  display: block; font-size: 12px;
  font-weight: 600; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.quiz-card-intake { display: block; font-size: 11px; color: var(--text-muted); }
.quiz-card-body { padding: 14px 16px; flex: 1; }
.quiz-card-title { font-size: 15px; font-weight: 600; margin-bottom: 10px; }
.quiz-card-stats {
  display: flex; flex-wrap: wrap; gap: 10px;
  margin-bottom: 10px;
}
.quiz-stat {
  display: flex; align-items: center; gap: 5px;
  font-size: 12px; color: var(--text-muted);
}
.quiz-stat i { width: 14px; color: var(--primary); }
.quiz-card-time {
  display: flex; flex-direction: column; gap: 3px;
  font-size: 11px; color: var(--text-muted);
  border-top: 1px solid var(--border);
  padding-top: 8px; margin-top: 8px;
}
.quiz-score-preview {
  display: flex; align-items: center; gap: 8px;
  margin-top: 10px; padding: 8px 12px;
  border-radius: var(--radius-sm);
  background: var(--bg);
}
.quiz-score-val { font-size: 22px; font-weight: 700; }
.quiz-score-label { font-size: 12px; color: var(--text-muted); }
.score-pass { color: var(--success); }
.score-fail { color: var(--danger); }
.quiz-card-footer {
  padding: 12px 16px;
  border-top: 1px solid var(--border);
}

/* ── Question cards (staff) ──────────────────── */
.question-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
}
.question-card-header {
  display: flex; justify-content: space-between;
  padding: 10px 16px;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.question-number { font-weight: 700; color: var(--primary); }
.question-marks  { color: var(--text-muted); font-size: 12px; }
.question-text   { padding: 14px 16px; font-size: 14px; line-height: 1.6; }
.question-options { border-top: 1px solid var(--border); }
.question-option {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.question-option:last-child { border-bottom: none; }
.question-option.option-correct {
  background: #d5f5e3;
}
.question-card-footer {
  padding: 10px 16px;
  border-top: 1px solid var(--border);
  background: var(--bg);
}

/* ── Option labels ───────────────────────────── */
.option-input-row { display: flex; align-items: center; gap: 8px; }
.option-label {
  width: 28px; height: 28px; flex-shrink: 0;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700;
  border: 1.5px solid;
}
.option-a { background: #d6eaf8; color: #1a5276; border-color: #aed6f1; }
.option-b { background: #d5f5e3; color: #1e8449; border-color: #a9dfbf; }
.option-c { background: #fef9e7; color: #d68910; border-color: #f9e79f; }
.option-d { background: #fadbd8; color: #c0392b; border-color: #f1948a; }

/* ── Result score card ───────────────────────── */
.result-score-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 28px 24px;
  display: flex; align-items: center; gap: 28px;
  box-shadow: var(--shadow);
}
.result-score-circle {
  width: 110px; height: 110px;
  border-radius: 50%;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  flex-shrink: 0; border: 5px solid;
}
.result-score-circle.score-pass {
  border-color: var(--success);
  background: #d5f5e3;
}
.result-score-circle.score-fail {
  border-color: var(--danger);
  background: #fadbd8;
}
.result-score-num { font-size: 26px; font-weight: 800; }
.result-score-sub { font-size: 11px; color: var(--text-muted); }
.result-score-info { flex: 1; }
.result-stats { display: flex; gap: 16px; flex-wrap: wrap; }
.result-stat { display: flex; align-items: center; gap: 6px; font-size: 13px; }
.result-badge {
  display: inline-block;
  padding: 5px 14px; border-radius: 20px;
  font-size: 13px; font-weight: 600;
}
.result-badge-distinction { background: #fef9e7; color: #d68910; }
.result-badge-pass        { background: #d5f5e3; color: #1e8449; }
.result-badge-fail        { background: #fadbd8; color: #c0392b; }

/* ── Review breakdown ────────────────────────── */
.review-question {
  border-radius: var(--radius-sm);
  border: 1px solid var(--border);
  margin-bottom: 14px;
  overflow: hidden;
}
.review-correct { border-left: 4px solid var(--success); }
.review-wrong   { border-left: 4px solid var(--danger); }
.review-q-header {
  display: flex; justify-content: space-between;
  padding: 8px 14px; background: var(--bg);
  border-bottom: 1px solid var(--border);
  font-size: 12px;
}
.review-q-num   { font-weight: 700; color: var(--primary); }
.review-q-text  { padding: 12px 14px; font-size: 13px; line-height: 1.6; }
.review-options { border-top: 1px solid var(--border); }
.review-option {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 14px; border-bottom: 1px solid var(--border);
  font-size: 12px;
}
.review-option:last-child { border-bottom: none; }
.review-option-correct         { background: #d5f5e3; }
.review-option-selected        { background: #fadbd8; }
.review-option-right-selected  { background: #d5f5e3; }

/* ── Mini progress (attempts table) ─────────────*/
.mini-progress {
  width: 60px; height: 6px;
  background: var(--border); border-radius: 3px;
  overflow: hidden;
}
.mini-progress-bar { height: 100%; border-radius: 3px; }

/* ── Mobile ──────────────────────────────────── */
@media (max-width: 576px) {
  .quiz-grid { grid-template-columns: 1fr; }
  .result-score-card { flex-direction: column; text-align: center; }
  .result-stats { justify-content: center; }
}

/* ═══════════════════════════════════════════════
   SUGGESTION BOX
═══════════════════════════════════════════════ */

/* ── Friday day banner ───────────────────────── */
.sug-day-banner {
  border-radius: var(--radius);
  padding: 16px 20px;
  display: flex;
  align-items: center;
  gap: 16px;
}
.sug-day-open   { background: #d5f5e3; border: 1px solid #a9dfbf; }
.sug-day-closed { background: #fef9e7; border: 1px solid #f9e79f; }
.sug-day-icon {
  width: 48px; height: 48px;
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px; flex-shrink: 0;
}
.sug-day-open .sug-day-icon   { background: #1e8449; color: #fff; }
.sug-day-closed .sug-day-icon { background: #d68910; color: #fff; }
.sug-day-title {
  font-weight: 700; font-size: 15px;
  color: var(--text);
}
.sug-day-sub { font-size: 13px; color: var(--text-muted); margin-top: 2px; }

/* ── Anonymous toggle ────────────────────────── */
.anon-toggle {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 14px;
}
.anon-toggle-inner {
  display: flex; align-items: center; gap: 12px;
}
.anon-toggle-icon {
  width: 38px; height: 38px;
  border-radius: 10px;
  background: #d6eaf8; color: #1a5276;
  display: flex; align-items: center; justify-content: center;
  font-size: 16px; flex-shrink: 0;
  transition: var(--transition);
}
.anon-toggle-text { flex: 1; }
.anon-toggle-label { font-size: 13px; font-weight: 600; }
.anon-toggle-sub   { font-size: 11px; color: var(--text-muted); }

/* Toggle switch */
.switch { position: relative; display: inline-block; width: 44px; height: 24px; }
.switch input { opacity: 0; width: 0; height: 0; }
.switch-slider {
  position: absolute; cursor: pointer;
  inset: 0; border-radius: 24px;
  background: var(--border);
  transition: .3s;
}
.switch-slider:before {
  content: ''; position: absolute;
  width: 18px; height: 18px;
  left: 3px; top: 3px;
  border-radius: 50%; background: #fff;
  transition: .3s;
}
.switch input:checked + .switch-slider { background: #8e44ad; }
.switch input:checked + .switch-slider:before { transform: translateX(20px); }

/* ── How-it-works steps ──────────────────────── */
.how-step {
  display: flex; gap: 14px;
  align-items: flex-start;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.how-step:last-child { border-bottom: none; }
.how-step-num {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700;
  flex-shrink: 0; margin-top: 2px;
}

/* ── My posts list (student) ─────────────────── */
.my-post-item {
  padding: 16px;
  border-bottom: 1px solid var(--border);
}
.my-post-item:last-child { border-bottom: none; }
.my-post-header {
  display: flex; justify-content: space-between;
  align-items: center; flex-wrap: wrap; gap: 8px;
  margin-bottom: 8px;
}
.my-post-date { font-size: 12px; color: var(--text-muted); }
.my-post-content {
  font-size: 13px; line-height: 1.7;
  color: var(--text);
  background: var(--bg);
  border-radius: var(--radius-sm);
  padding: 10px 14px;
  margin-bottom: 10px;
}

/* Mini key row (student view) */
.mini-key-row { display: flex; gap: 6px; flex-wrap: wrap; }
.mini-key {
  display: flex; align-items: center; gap: 4px;
  padding: 4px 8px;
  border-radius: 20px;
  font-size: 10px; font-weight: 500;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text-muted);
}
.mini-key-done {
  background: #d5f5e3;
  border-color: #a9dfbf;
  color: #1e8449;
}
.mini-key i { font-size: 9px; }

/* ── Staff box: lock legend ──────────────────── */
.sug-lock-legend {
  display: flex; gap: 16px; flex-wrap: wrap; align-items: center;
}
.sug-lock-legend-item {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: var(--text-muted);
}
.lock-dot {
  width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0;
}
.lock-dot-locked   { background: #d68910; }
.lock-dot-unlocked { background: #1e8449; }

/* Key status chip */
.key-status-chip {
  padding: 5px 12px;
  border-radius: 20px;
  font-size: 12px; font-weight: 500;
  display: flex; align-items: center; gap: 4px;
}
.key-chip-done {
  background: #d5f5e3; color: #1e8449;
  border: 1px solid #a9dfbf;
}
.key-chip-na {
  background: var(--bg); color: var(--text-muted);
  border: 1px solid var(--border);
}

/* ── Post card ───────────────────────────────── */
.sug-post-card {
  background: var(--card-bg);
  border-radius: var(--radius);
  border: 1px solid var(--border);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.sug-post-unlocked {
  border-left: 4px solid #1e8449;
}
.sug-post-locked {
  border-left: 4px solid #d68910;
}
.sug-post-header {
  display: flex; align-items: flex-start;
  justify-content: space-between;
  flex-wrap: wrap; gap: 12px;
  padding: 16px 20px;
  border-bottom: 1px solid var(--border);
  background: var(--bg);
}
.sug-post-sender { display: flex; align-items: center; gap: 12px; }
.sug-post-avatar {
  width: 44px; height: 44px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; font-weight: 700;
  flex-shrink: 0;
}
.sug-avatar-named { background: var(--primary); color: #fff; }
.sug-avatar-anon  { background: #e8daef; color: #8e44ad; }
.sug-post-name {
  font-weight: 600; font-size: 14px;
  display: flex; align-items: center; gap: 8px;
}
.anon-pill {
  padding: 2px 8px; border-radius: 20px;
  background: #e8daef; color: #8e44ad;
  font-size: 10px; font-weight: 600;
}
.sug-post-intake { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
.sug-post-meta {
  display: flex; flex-direction: column;
  align-items: flex-end; gap: 6px;
}
.sug-post-date { font-size: 12px; color: var(--text-muted); }
.sug-lock-badge {
  padding: 4px 10px; border-radius: 20px;
  font-size: 11px; font-weight: 600;
}
.sug-lock-open   { background: #d5f5e3; color: #1e8449; }
.sug-lock-closed { background: #fef9e7; color: #d68910; }

/* ── Post body ───────────────────────────────── */
.sug-post-body { padding: 20px; }
.sug-post-content {
  font-size: 14px; line-height: 1.8;
  color: var(--text);
}
.sug-post-locked-content {
  text-align: center; padding: 28px 20px;
  background: var(--bg);
  border-radius: var(--radius-sm);
  border: 2px dashed var(--border);
}
.sug-locked-icon {
  font-size: 32px; color: #d68910;
  margin-bottom: 10px; opacity: .7;
}
.sug-locked-msg {
  font-size: 14px; font-weight: 600;
  color: var(--text); margin-bottom: 6px;
}
.sug-locked-sub {
  font-size: 12px; color: var(--text-muted);
}

/* ── 4-key grid ──────────────────────────────── */
.sug-key-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--border);
}
.sug-key-cell {
  padding: 12px 10px;
  display: flex; flex-direction: column;
  align-items: center; gap: 4px;
  border-right: 1px solid var(--border);
  font-size: 11px; text-align: center;
  transition: var(--transition);
}
.sug-key-cell:last-child { border-right: none; }
.sug-key-cell i { font-size: 16px; }
.sug-key-read {
  background: #d5f5e3;
  color: #1e8449;
}
.sug-key-unread {
  background: var(--bg);
  color: var(--text-muted);
}
.sug-key-name   { font-weight: 600; font-size: 10px; }
.sug-key-status { font-size: 10px; }

/* ── Post footer ─────────────────────────────── */
.sug-post-footer {
  padding: 12px 20px;
  border-top: 1px solid var(--border);
  background: var(--bg);
  display: flex; align-items: center;
}

/* ── Mobile ──────────────────────────────────── */
@media (max-width: 768px) {
  .sug-key-grid { grid-template-columns: repeat(2, 1fr); }
  .sug-key-cell:nth-child(2) { border-right: none; }
  .sug-key-cell:nth-child(3) { border-top: 1px solid var(--border); }
}
@media (max-width: 480px) {
  .sug-key-grid { grid-template-columns: 1fr; }
  .sug-key-cell { border-right: none; border-top: 1px solid var(--border); }
  .sug-key-cell:first-child { border-top: none; }
  .sug-post-header { flex-direction: column; }
  .sug-post-meta { align-items: flex-start; }
}

/* ═══════════════════════════════════════════════
   REPORTS
═══════════════════════════════════════════════ */

.reports-intro {
  display: flex; align-items: center; gap: 16px;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 20px;
  box-shadow: var(--shadow);
}
.reports-intro-icon {
  width: 48px; height: 48px; flex-shrink: 0;
  border-radius: 14px;
  background: var(--primary-pale);
  color: var(--primary);
  display: flex; align-items: center;
  justify-content: center; font-size: 22px;
}

/* Report cards */
.report-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
  height: 100%;
  display: flex; flex-direction: column;
  transition: var(--transition);
}
.report-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.report-card-header {
  display: flex; align-items: center; gap: 14px;
  padding: 16px 20px;
  border-bottom: 1px solid var(--border);
}
.report-blue   { background: linear-gradient(135deg,#1a5276,#2471a3); }
.report-green  { background: linear-gradient(135deg,#148f77,#1abc9c); }
.report-purple { background: linear-gradient(135deg,#6c3483,#8e44ad); }
.report-orange { background: linear-gradient(135deg,#935116,#d68910); }

.report-card-icon {
  width: 44px; height: 44px; flex-shrink: 0;
  border-radius: 12px;
  background: rgba(255,255,255,.2);
  display: flex; align-items: center;
  justify-content: center;
  font-size: 20px; color: #fff;
}
.report-card-title {
  color: #fff; font-weight: 700; font-size: 15px;
}
.report-card-sub {
  color: rgba(255,255,255,.8); font-size: 11px;
  margin-top: 2px;
}
.report-card-body {
  padding: 18px 20px; flex: 1;
}
.report-btn-row {
  display: flex; gap: 8px; margin-top: 4px;
}

/* Stats strip */
.reports-stats-strip {
  display: flex; flex-wrap: wrap; gap: 0;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.rep-stat {
  flex: 1; min-width: 140px;
  display: flex; align-items: center; gap: 12px;
  padding: 18px 20px;
  border-right: 1px solid var(--border);
}
.rep-stat:last-child { border-right: none; }
.rep-stat i { font-size: 24px; flex-shrink: 0; }
.rep-stat-val   { font-size: 22px; font-weight: 700; line-height: 1; }
.rep-stat-label { font-size: 11px; color: var(--text-muted); margin-top: 3px; }

/* color helpers for icons */
.text-purple { color: #8e44ad; }

@media (max-width: 576px) {
  .report-btn-row { flex-direction: column; }
  .reports-stats-strip { flex-direction: column; }
  .rep-stat { border-right: none; border-bottom: 1px solid var(--border); }
  .rep-stat:last-child { border-bottom: none; }
}

/* ═══════════════════════════════════════════════
   ANNOUNCEMENTS
═══════════════════════════════════════════════ */
.ann-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
  transition: var(--transition);
}
.ann-card:hover { transform: translateY(-1px); box-shadow: var(--shadow-md); }
.ann-card-pinned { border-left: 4px solid #d68910; }
.ann-card-header {
  display: flex; justify-content: space-between;
  align-items: center; flex-wrap: wrap; gap: 8px;
  padding: 12px 18px;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
}
.ann-pin-badge {
  padding: 3px 9px; border-radius: 20px;
  background: #fef9e7; color: #d68910;
  font-size: 11px; font-weight: 600;
}
.ann-target-all   { background:#d6eaf8;color:#1a5276; }
.ann-target-intake{ background:#d5f5e3;color:#1e8449; }
.ann-target-badge {
  padding: 3px 9px; border-radius: 20px;
  font-size: 11px; font-weight: 600;
}
.ann-date  { font-size: 11px; color: var(--text-muted); }
.ann-card-body { padding: 16px 18px; }
.ann-card-title { font-size: 16px; font-weight: 700; margin-bottom: 8px; }
.ann-card-content { font-size: 13px; line-height: 1.7; color: var(--text); }
.ann-read-more { font-size: 12px; color: var(--primary); font-weight: 500; }
.ann-card-footer {
  padding: 10px 18px;
  border-top: 1px solid var(--border);
  display: flex; justify-content: space-between;
  flex-wrap: wrap; gap: 6px;
}
.ann-poster, .ann-expiry {
  font-size: 11px; color: var(--text-muted);
}

/* ═══════════════════════════════════════════════
   ASSIGNMENTS
═══════════════════════════════════════════════ */
.assignments-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 16px;
}
.asgn-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: var(--shadow);
  transition: var(--transition);
}
.asgn-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.asgn-overdue { border-left: 4px solid var(--danger); }
.asgn-card-header {
  padding: 12px 16px;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
  display: flex; flex-direction: column; gap: 4px;
}
.asgn-course-tag {
  font-size: 11px; font-weight: 600;
  color: var(--primary);
}
.asgn-due {
  font-size: 11px; color: var(--text-muted);
}
.asgn-due-overdue { color: var(--danger); font-weight: 600; }
.asgn-card-body { padding: 14px 16px; flex: 1; }
.asgn-title { font-size: 14px; font-weight: 700; margin-bottom: 6px; }
.asgn-desc  { font-size: 12px; color: var(--text-muted);
              line-height: 1.6; margin-bottom: 8px; }
.asgn-meta  { display: flex; gap: 12px; font-size: 11px;
              color: var(--text-muted); }
.asgn-submitted-bar {
  padding: 8px 16px;
  background: #d5f5e3;
  border-top: 1px solid #a9dfbf;
  font-size: 12px; font-weight: 500; color: #1e8449;
}
.asgn-card-footer {
  padding: 12px 16px;
  border-top: 1px solid var(--border);
}
.asgn-icon-big {
  width: 52px; height: 52px; flex-shrink: 0;
  border-radius: 14px;
  background: var(--primary-pale); color: var(--primary);
  display: flex; align-items: center;
  justify-content: center; font-size: 22px;
}

/* AI score pills */
.ai-score-pill {
  display: inline-flex; align-items: center;
  padding: 4px 10px; border-radius: 20px;
  font-size: 12px; font-weight: 700;
}
.ai-high { background: #fadbd8; color: #c0392b; }
.ai-med  { background: #fef9e7; color: #d68910; }
.ai-low  { background: #d5f5e3; color: #1e8449; }

/* AI notice block */
.ai-notice {
  display: flex; align-items: flex-start; gap: 14px;
  padding: 14px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  border-left: 3px solid var(--primary);
}
.ai-notice-icon {
  width: 36px; height: 36px; flex-shrink: 0;
  border-radius: 10px;
  background: var(--primary-pale); color: var(--primary);
  display: flex; align-items: center;
  justify-content: center; font-size: 16px;
}
.ai-notice-title { font-weight: 600; font-size: 13px; margin-bottom: 3px; }
.ai-notice-sub   { font-size: 12px; color: var(--text-muted); line-height: 1.6; }

@media (max-width: 576px) {
  .assignments-grid { grid-template-columns: 1fr; }
}

/* ── Day timeline pills ──────────────────────── */
.timeline-days {
  display: flex;
  gap: 8px;
  justify-content: center;
  flex-wrap: wrap;
}
.day-pill {
  display: flex; flex-direction: column;
  align-items: center; gap: 4px;
  padding: 10px 14px;
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--border);
  min-width: 60px;
  font-size: 12px;
}
.day-pill-label { font-weight: 700; font-size: 13px; }
.day-pill-icon  { font-size: 16px; }
.day-pill-sub   { font-size: 10px; }

.day-pill-post {
  background: #d6eaf8; border-color: #aed6f1;
  color: #1a5276;
}
.day-pill-open {
  background: #d5f5e3; border-color: #a9dfbf;
  color: #1e8449;
}
.day-pill-today {
  background: var(--primary); border-color: var(--primary);
  color: #fff;
}

/* ── Session indicator (green dot in topbar) ─ */
.session-indicator {
  width: 32px; height: 32px;
  display: flex; align-items: center;
  justify-content: center;
}
.session-dot {
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--success);
  animation: session-pulse 3s ease-in-out infinite;
}
@keyframes session-pulse {
  0%,100% { opacity: 1;   transform: scale(1); }
  50%      { opacity: .6; transform: scale(.85); }
}

/* When warning is active the dot turns orange */
.session-dot.warning {
  background: #d68910;
  animation: session-pulse .8s ease-in-out infinite;
}

/* ── File preview ────────────────────────────────*/
.file-preview-box {
  border: 1.5px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 14px;
  text-align: center;
  background: var(--bg);
  margin-top: 10px;
}
.file-preview-img {
  max-width: 100%;
  max-height: 220px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--border);
  object-fit: contain;
  display: block;
  margin: 0 auto 10px;
}
.file-preview-meta {
  font-size: 12px;
  margin-bottom: 6px;
}
.file-preview-ok {
  font-size: 11px;
  color: var(--success);
  font-weight: 600;
  margin-top: 6px;
}
.file-preview-ok i { margin-right: 4px; }

.file-preview-pdf { text-align: left; }
.pdf-preview-header {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
  flex-wrap: wrap;
  gap: 8px;
}
.pdf-preview-frame {
  width: 100%;
  height: 300px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.file-preview-excel { padding: 24px; }

/* Photo preview in profile / register */
.photo-preview-wrap {
  position: relative;
  display: inline-block;
}
.photo-preview-img {
  width: 100px; height: 100px;
  border-radius: 50%;
  object-fit: cover;
  border: 3px solid var(--primary);
  display: block;
}
.photo-preview-badge {
  position: absolute;
  bottom: 0; right: 0;
  background: var(--success);
  color: #fff;
  border-radius: 50%;
  width: 22px; height: 22px;
  display: flex; align-items: center;
  justify-content: center;
  font-size: 10px;
  border: 2px solid #fff;
}

/* ── Results post steps ──────────────────────── */
.results-step {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px;
}
.results-step-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--primary);
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.step-num {
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex; align-items: center;
  justify-content: center;
  font-size: 12px; font-weight: 700;
  flex-shrink: 0;
}

/* Readonly fields — grayed out, not clickable */
input[readonly],
textarea[readonly],
select[disabled],
input[disabled] {
  background : #f4f6f9 !important;
  color      : #7f8c8d !important;
  cursor     : not-allowed !important;
  border-color: #e8edf2 !important;
  opacity    : 1 !important;
}

/* ── Profile view fields (read-only display) ─ */
.profile-view-field {
  padding: 10px 14px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.profile-view-label {
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .5px;
  color: var(--text-muted);
  margin-bottom: 3px;
}
.profile-view-value {
  font-size: 14px;
  font-weight: 500;
  color: var(--text);
}
/* ── Activity Calendar ───────────────────────── */
.cal-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.cal-month-label {
  font-weight: 700;
  font-size: 14px;
  color: var(--text);
}
.cal-nav-btn {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  width: 30px; height: 30px;
  display: flex; align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 12px;
  color: var(--text);
  transition: var(--transition);
}
.cal-nav-btn:hover {
  background: var(--primary);
  color: #fff;
  border-color: var(--primary);
}
.cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}
.cal-header-row .cal-day-name {
  text-align: center;
  font-size: 10px;
  font-weight: 700;
  color: var(--text-muted);
  padding: 4px 0;
  text-transform: uppercase;
}
.cal-cell {
  min-height: 36px;
  border-radius: 6px;
  padding: 2px;
  display: flex;
  flex-direction: column;
  align-items: center;
  font-size: 11px;
}
.cal-cell-empty { background: transparent; }
.cal-cell-has-events {
  background: var(--primary-pale);
  border: 1px solid var(--border);
}
.cal-cell-today .cal-day-num {
  background: var(--primary);
  color: #fff;
  border-radius: 50%;
  width: 20px; height: 20px;
  display: flex; align-items: center;
  justify-content: center;
  font-weight: 700;
}
.cal-day-num {
  font-size: 11px;
  font-weight: 500;
  line-height: 1;
  margin-bottom: 2px;
}
.cal-dots {
  display: flex;
  gap: 2px;
  flex-wrap: wrap;
  justify-content: center;
}
.cal-dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  display: inline-block;
}
.cal-dot-assignment { background: #c0392b; }
.cal-dot-quiz       { background: #d68910; }
.cal-dot-holiday    { background: #1e8449; }
.cal-dot-today      { background: var(--primary); }

.cal-legend {
  font-size: 10px;
  color: var(--text-muted);
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
}

.cal-event-list {
  margin-top: 10px;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 10px 12px;
}
.cal-event-date {
  font-size: 12px;
  font-weight: 700;
  color: var(--primary);
  margin-bottom: 6px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--border);
}
.cal-event-item {
  font-size: 12px;
  padding: 5px 0;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
}
.cal-event-item:last-child { border-bottom: none; }

/* ── Quick links grid ────────────────────────── */
.quick-links-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
}
.quick-link-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 10px 4px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  text-decoration: none;
  color: var(--text);
  font-size: 10px;
  font-weight: 600;
  transition: var(--transition);
  text-align: center;
}
.quick-link-btn i { font-size: 16px; color: var(--primary); }
.quick-link-btn:hover {
  background: var(--primary);
  color: #fff;
  border-color: var(--primary);
  transform: translateY(-1px);
}
.quick-link-btn:hover i { color: #fff; }

/* ── Dashboard list items ────────────────────── */
.dashboard-list-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
}
.dashboard-list-item:last-child { border-bottom: none; }
.dashboard-list-item-danger  { background: #fdf2f2; }
.dashboard-list-item-success { background: #f2fdf5; }
.dashboard-list-icon { font-size: 18px; flex-shrink: 0; }
.dashboard-list-body { flex: 1; min-width: 0; }
.dashboard-list-title {
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dashboard-list-sub {
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 2px;
}

/* ── Reports grid ────────────────────────────── */
.reports-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px,1fr));
  gap: 20px;
}
.report-card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  box-shadow: var(--shadow);
  transition: var(--transition);
}
.report-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.report-card-icon {
  width: 48px; height: 48px;
  border-radius: 14px;
  display: flex; align-items: center;
  justify-content: center;
  font-size: 20px;
}
.report-card-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
}
.report-card-desc {
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.6;
  flex: 1;
}
.report-card-badge {
  font-size: 10px;
  font-weight: 600;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: .5px;
}
.report-card-actions {
  display: flex;
  gap: 8px;
  margin-top: 4px;
}

/* ── Reports modal rows ──────────────────────── */
.modal-report-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.modal-report-row:last-child { border-bottom: none; }
.modal-report-info {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: 1;
  min-width: 0;
}
.modal-report-icon {
  width: 38px; height: 38px;
  border-radius: 10px;
  display: flex; align-items: center;
  justify-content: center;
  font-size: 16px;
  flex-shrink: 0;
}
.modal-report-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}
.modal-report-sub {
  font-size: 11px;
  color: var(--text-muted);
  line-height: 1.4;
}
.modal-report-btns {
  display: flex;
  gap: 6px;
  flex-shrink: 0;
}