:root{
  --primary:#2563eb;
  --primary-dark:#1d4ed8;
  --primary-soft:#e8f0ff;
  --dark:#07132b;
  --dark-2:#0d1b38;
  --body:#f2f5fb;
  --card:#ffffff;
  --muted:#6b7280;
  --text:#132238;
  --line:#e6ebf3;
  --success:#10b981;
  --warning:#f59e0b;
  --danger:#ef4444;
  --purple:#8b5cf6;
}
*{box-sizing:border-box}
body{margin:0;font-family:'Poppins',sans-serif;background:var(--body);color:var(--text)}
a{text-decoration:none}
img{max-width:100%}
.portal-shell{display:flex;min-height:100vh}
.portal-sidebar{width:280px;background:linear-gradient(180deg,var(--dark),var(--dark-2));color:#fff;padding:24px 18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.portal-brand{display:flex;gap:14px;align-items:center;padding:8px 6px 24px;color:#fff;border-bottom:1px solid rgba(255,255,255,.08)}
.portal-brand img{width:52px;height:52px;object-fit:contain;background:#fff;border-radius:16px;padding:6px}
.portal-brand h6{font-size:28px;margin:0 0 2px;font-weight:800;letter-spacing:.2px}
.portal-brand span{font-size:13px;color:rgba(255,255,255,.7)}
.portal-role-badge{margin:22px 4px 18px;padding:12px 16px;border-radius:16px;background:rgba(37,99,235,.22);color:#dbeafe;font-weight:600}
.portal-menu{display:flex;flex-direction:column;gap:8px}
.portal-menu-item{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;color:#d7deef;font-weight:500;transition:.2s}
.portal-menu-item i{font-size:1.15rem}
.portal-menu-item:hover,.portal-menu-item.active{background:linear-gradient(90deg,rgba(37,99,235,.24),rgba(37,99,235,.08));color:#fff;transform:translateX(2px)}
.portal-sidebar-footer{margin-top:auto;padding-top:20px}
.portal-logout{display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 16px;border:1px solid rgba(255,255,255,.18);border-radius:16px;color:#fff;font-weight:600}
.portal-main{flex:1;min-width:0}
.portal-topbar{display:flex;justify-content:space-between;align-items:center;padding:28px 34px 10px;gap:18px}
.portal-overline{font-size:12px;text-transform:uppercase;letter-spacing:.16em;color:var(--primary);font-weight:700;margin-bottom:6px}
.portal-topbar h1{margin:0;font-size:32px;font-weight:800;color:#0f172a}
.portal-topbar-user{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--line);padding:10px 14px;border-radius:18px;box-shadow:0 18px 40px rgba(15,23,42,.06)}
.portal-topbar-user img{width:48px;height:48px;border-radius:50%;object-fit:cover;background:#eef2ff}
.portal-topbar-user strong{display:block}
.portal-topbar-user small{color:var(--muted)}
.portal-content{padding:8px 34px 34px}
.portal-hero{background:linear-gradient(135deg,#163fae,#1d4ed8 50%,#22a3ff);color:#fff;border-radius:28px;padding:30px 30px;box-shadow:0 25px 60px rgba(37,99,235,.24)}
.portal-chip{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.14);padding:10px 14px;border-radius:999px;color:#fff;font-weight:600;font-size:13px}
.portal-card,.landing-card{background:var(--card);border:1px solid var(--line);border-radius:24px;box-shadow:0 12px 36px rgba(15,23,42,.06)}
.portal-card .card-body,.landing-card{padding:24px}
.portal-form-card{padding:26px}
.portal-muted,.text-white-75{color:rgba(255,255,255,.82)}
.portal-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.portal-stat{position:relative;border-radius:24px;color:#fff;padding:22px 22px;min-height:138px;overflow:hidden}
.portal-stat p{margin:0 0 12px;font-weight:500;opacity:.92}
.portal-stat h3{margin:0;font-size:42px;font-weight:800}
.portal-stat i{position:absolute;right:22px;bottom:18px;font-size:36px;opacity:.18}
.portal-stat.s1{background:linear-gradient(135deg,#3b82f6,#38bdf8)}
.portal-stat.s2{background:linear-gradient(135deg,#8b5cf6,#d946ef)}
.portal-stat.s3{background:linear-gradient(135deg,#10b981,#34d399)}
.portal-stat.s4{background:linear-gradient(135deg,#f97316,#fb923c)}
.portal-section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.portal-section-title h5{font-size:30px;margin:0;font-weight:800;color:#172554}
.portal-list{display:flex;flex-direction:column;gap:14px}
.portal-list-item{padding:14px 16px;border:1px solid var(--line);background:#fbfcff;border-radius:18px}
.portal-list-item h6{margin:0 0 4px;font-size:15px;font-weight:700;color:#111827}
.portal-list-item p{margin:0;color:var(--muted);line-height:1.55}
.hero-landing{background:linear-gradient(180deg,#eef5ff,#f6f8fc)}
.landing-wrap{max-width:1280px;margin:0 auto;padding:26px}
.landing-nav{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:14px 0 28px}
.brand{display:flex;align-items:center;gap:14px}.brand img{width:64px;height:64px;object-fit:contain;background:#fff;border-radius:18px;padding:8px;box-shadow:0 10px 30px rgba(15,23,42,.08)}
.brand h4{margin:0;font-size:24px;font-weight:800}.brand span{color:var(--muted)}
.landing-cta{display:flex;gap:12px;flex-wrap:wrap}
.landing-btn{padding:13px 18px;border-radius:999px;font-weight:600;border:1px solid transparent;display:inline-flex;align-items:center;gap:8px}
.landing-btn.primary{background:var(--primary);color:#fff;box-shadow:0 15px 35px rgba(37,99,235,.24)}
.landing-btn.soft{background:#fff;color:#0f172a;border-color:var(--line)}
.landing-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:30px;align-items:center;padding-top:10px}
.landing-title{font-size:clamp(42px,6vw,72px);line-height:1.05;font-weight:800;color:#0f172a;margin:14px 0 20px;max-width:880px}
.landing-text{font-size:18px;color:#475569;max-width:820px;line-height:1.8}
.landing-image{width:100%;height:260px;object-fit:cover;border-radius:22px}
.kpi-row{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:26px}.kpi-box{background:#fff;border:1px solid var(--line);border-radius:22px;padding:22px}.kpi-box strong{display:block;font-size:32px;margin-bottom:8px;color:#172554}.kpi-box span{color:var(--muted)}
.portal-table{margin:0}.portal-table thead th{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:#64748b;border-bottom:1px solid var(--line);padding:14px 12px}.portal-table tbody td{padding:16px 12px;color:#1f2937;border-bottom:1px solid #edf2f7;vertical-align:top}
.portal-table tbody tr:last-child td{border-bottom:none}
.portal-empty{padding:28px;border:1px dashed #cbd5e1;border-radius:18px;background:#f8fbff;color:#64748b;text-align:center}
.portal-badge{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;background:var(--primary-soft);color:var(--primary-dark);font-weight:600;font-size:13px}
.btn-primary,.btn-primary-600{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover,.btn-primary-600:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff}
.btn-success-main{background:var(--success);border-color:var(--success);color:#fff}
.btn-success-main:hover{background:#059669;border-color:#059669;color:#fff}
.btn-primary-50{background:#e8f0ff;border:1px solid #cfe0ff}
.btn-success-50{background:#e9fbf4;border:1px solid #c8f5e2}
.btn-info-50{background:#e8f8ff;border:1px solid #cceeff}
.form-control,.form-select,.form-control:focus,.form-select:focus{border-radius:16px;border-color:#d8e1ee;box-shadow:none;padding:12px 14px}
textarea.form-control{min-height:120px}
.form-label{font-weight:600;color:#334155}.small,.text-secondary{color:#64748b!important}
.teacher-profile-avatar{width:88px;height:88px;border-radius:50%;object-fit:cover;background:#eef2ff;border:4px solid #fff;box-shadow:0 12px 30px rgba(15,23,42,.08)}
.teacher-profile-avatar-lg{width:116px;height:116px}
.file-pill{display:inline-flex;gap:8px;align-items:center;padding:10px 14px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-weight:600}
@media (max-width: 1199px){.portal-grid-4{grid-template-columns:repeat(2,1fr)}.landing-grid{grid-template-columns:1fr}.portal-sidebar{position:fixed;left:0;top:0;bottom:0;transform:translateX(0);z-index:20}}
@media (max-width: 991px){.portal-shell{display:block}.portal-sidebar{position:relative;width:100%;height:auto;padding-bottom:18px}.portal-topbar,.portal-content{padding-left:18px;padding-right:18px}.portal-topbar{padding-top:20px}.portal-topbar h1{font-size:26px}.landing-nav{flex-direction:column;align-items:flex-start}.kpi-row,.portal-grid-4{grid-template-columns:1fr}.landing-wrap{padding:18px}.landing-title{font-size:46px}}
