/* =========================================================
   TABLE SEARCH & PAGINATION
   Digunakan oleh assets/js/table-search-paginate.js
   Otomatis aktif pada setiap <table class="data-table">
========================================================= */
.table-tsp-wrapper {
    position: relative;
}
.tsp-controls {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
}
.tsp-controls .tsp-search {
    max-width: 280px;
    flex: 1;
    min-width: 160px;
}
.tsp-right {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}
.tsp-perpage-label {
    font-size: 0.82rem;
    color: var(--muted);
    display: flex;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
}
.tsp-perpage {
    width: auto;
    display: inline-block;
    padding: 5px 10px;
    font-size: 0.82rem;
    max-width: 80px;
}
.tsp-paginator {
    display: flex;
    align-items: center;
    gap: 4px;
}
.tsp-page {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 34px;
    height: 34px;
    padding: 0 8px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    color: var(--text);
    font-size: 0.82rem;
    font-weight: 600;
    cursor: pointer;
    transition: all .12s;
    line-height: 1;
}
.tsp-page:hover:not(.disabled):not(.active) {
    border-color: var(--blue);
    color: var(--blue);
}
.tsp-page.active {
    background: var(--blue);
    border-color: var(--blue);
    color: #fff;
}
.tsp-page.disabled {
    opacity: 0.4;
    cursor: default;
    pointer-events: none;
}
.tsp-dots {
    padding: 0 4px;
    font-size: 0.9rem;
    color: var(--muted);
    letter-spacing: 2px;
}
.tsp-info {
    font-size: 0.8rem;
    color: var(--muted);
    margin-bottom: 8px;
}
/* Row hidden by search filter */
tr.tsp-hidden {
    display: none !important;
}
/* Responsive: tumpuk kontrol di layar kecil */
@media (max-width: 600px) {
    .tsp-controls {
        flex-direction: column;
        align-items: stretch;
    }
    .tsp-controls .tsp-search {
        max-width: 100%;
    }
    .tsp-right {
        justify-content: space-between;
    }
    .tsp-paginator {
        flex-wrap: wrap;
        justify-content: center;
    }
}

/* Empty state *//* =========================================================
   SISTEM INFORMASI SEKOLAH — TEMA BIRU MODERN
   Token: 
   --navy:  #0F2A4A (sidebar/dark surface)
   --blue:  #2563EB (primary/aksi)
   --blue-dark: #1D4ED8 (hover)
   --sky:   #38BDF8 (aksen highlight)
   --bg:    #F5F8FC (latar halaman)
   --text:  #1E293B
   --muted: #64748B
   --border:#E2E8F0
   Font: Sora (display/angka), Inter (body)
========================================================= */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;600;700;800&family=Inter:wght@400;500;600;700&display=swap');

:root{
  --navy:#0F2A4A;
  --navy-light:#173C64;
  --blue:#2563EB;
  --blue-dark:#1D4ED8;
  --sky:#38BDF8;
  --bg:#F5F8FC;
  --surface:#FFFFFF;
  --text:#1E293B;
  --muted:#64748B;
  --border:#E2E8F0;
  --success:#10B981;
  --warning:#F59E0B;
  --danger:#EF4444;
  --radius:10px;
  --shadow:0 1px 3px rgba(15,42,74,0.08), 0 1px 2px rgba(15,42,74,0.06);
  --shadow-md:0 4px 14px rgba(15,42,74,0.10);
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:'Inter', sans-serif;
  background:var(--bg);
  color:var(--text);
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,.brand,.stat-value{font-family:'Sora', sans-serif;}
a{color:inherit; text-decoration:none;}
button, input, select, textarea{font-family:inherit;}

/* ---------- Scrollbar tipis ---------- */
::-webkit-scrollbar{width:8px; height:8px;}
::-webkit-scrollbar-thumb{background:#CBD5E1; border-radius:8px;}

/* ---------- Fokus keyboard terlihat ---------- */
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible{
  outline:2px solid var(--blue);
  outline-offset:2px;
}

/* =========================================================
   HALAMAN LOGIN
========================================================= */
.login-page{
  min-height:100vh;
  display:flex;
  align-items:center;
  justify-content:center;
  background:
    radial-gradient(circle at 15% 20%, rgba(56,189,248,0.25), transparent 40%),
    radial-gradient(circle at 85% 80%, rgba(37,99,235,0.35), transparent 45%),
    linear-gradient(160deg, var(--navy) 0%, #0A1D33 100%);
  padding:20px;
}
.login-wrapper{
  display:flex;
  align-items:flex-start;
  gap:28px;
  max-width:780px;
  width:100%;
}
.login-box{
  background:var(--surface);
  width:100%;
  max-width:380px;
  padding:40px 32px;
  border-radius:16px;
  box-shadow:0 20px 60px rgba(0,0,0,0.35);
  flex-shrink:0;
}
.login-box h2{
  margin:0 0 4px;
  font-size:1.4rem;
  font-weight:700;
  color:var(--navy);
}
.login-box .subtitle{
  margin:0 0 24px;
  color:var(--muted);
  font-size:0.9rem;
}
.login-box label{
  display:block;
  font-size:0.82rem;
  font-weight:600;
  margin:14px 0 6px;
  color:var(--text);
}
.login-box input{
  width:100%;
  padding:11px 14px;
  border:1px solid var(--border);
  border-radius:8px;
  font-size:0.95rem;
  transition:border-color .15s, box-shadow .15s;
}
.login-box input:focus{
  border-color:var(--blue);
  box-shadow:0 0 0 3px rgba(37,99,235,0.15);
  outline:none;
}
.login-box button{
  width:100%;
  margin-top:22px;
  padding:12px;
  background:linear-gradient(135deg, var(--blue), var(--blue-dark));
  color:#fff;
  border:none;
  border-radius:8px;
  font-weight:600;
  font-size:0.95rem;
  cursor:pointer;
  transition:transform .1s, box-shadow .15s;
}
.login-box button:hover{ box-shadow:0 6px 16px rgba(37,99,235,0.35); }
.login-box button:active{ transform:translateY(1px); }

.alert{
  padding:10px 14px;
  border-radius:8px;
  font-size:0.85rem;
  margin-bottom:6px;
}
.alert-error{ background:#FEF2F2; color:#B91C1C; border:1px solid #FECACA; }
.alert-success{ background:#ECFDF5; color:#047857; border:1px solid #A7F3D0; }

/* ---------- Panel Pengumuman (halaman login) ---------- */
.announcement-panel{
  background:rgba(255,255,255,0.06);
  border:1px solid rgba(255,255,255,0.14);
  border-radius:16px;
  padding:24px;
  width:100%;
  max-width:340px;
  max-height:480px;
  overflow-y:auto;
  backdrop-filter:blur(6px);
}
.announcement-panel h3{
  margin:0 0 14px;
  color:#fff;
  font-size:1rem;
}
.announcement-item{
  background:rgba(255,255,255,0.05);
  border:1px solid rgba(255,255,255,0.1);
  border-radius:10px;
  padding:12px 14px;
  margin-bottom:12px;
}
.announcement-item:last-child{ margin-bottom:0; }
.announcement-head{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:6px;
}
.announcement-date{ font-size:0.72rem; color:#9FB4CC; }
.announcement-title{ font-weight:700; color:#fff; font-size:0.9rem; margin-bottom:4px; }
.announcement-body{ font-size:0.82rem; color:#CBD8EA; line-height:1.5; }

@media (max-width: 780px){
  .login-wrapper{ flex-direction:column; align-items:center; }
  .login-box, .announcement-panel{ max-width:380px; }
}

/* =========================================================
   LAYOUT UTAMA (APP SHELL)
========================================================= */
.app-shell{
  display:flex;
  min-height:100vh;
}

/* ---------- Sidebar ---------- */
.sidebar{
  width:250px;
  flex-shrink:0;
  background:linear-gradient(180deg, var(--navy) 0%, #0A2038 100%);
  color:#E2E8F0;
  display:flex;
  flex-direction:column;
  position:fixed;
  top:0; left:0; bottom:0;
  z-index:100;
  transition:transform .25s ease;
}
.sidebar .brand{
  display:flex;
  align-items:center;
  gap:10px;
  padding:22px 20px;
  font-weight:700;
  font-size:1.05rem;
  color:#fff;
  border-bottom:1px solid rgba(255,255,255,0.08);
}
.sidebar .brand .logo-dot{
  width:10px; height:10px; border-radius:3px;
  background:var(--sky);
  box-shadow:0 0 0 4px rgba(56,189,248,0.2);
}
.sidebar nav{ padding:16px 12px; flex:1; overflow-y:auto; }
.sidebar .nav-section{
  font-size:0.68rem;
  text-transform:uppercase;
  letter-spacing:0.08em;
  color:#7C93B0;
  margin:16px 10px 8px;
}
.sidebar .nav-item{
  display:flex;
  align-items:center;
  gap:10px;
  padding:10px 12px;
  margin:2px 0;
  border-radius:8px;
  font-size:0.9rem;
  color:#CBD8EA;
  transition:background .15s, color .15s;
}
.sidebar .nav-item:hover{ background:rgba(255,255,255,0.06); color:#fff; }
.sidebar .nav-item.active{
  background:var(--blue);
  color:#fff;
  font-weight:600;
}
.sidebar .nav-icon{ width:18px; text-align:center; font-size:1rem; }
.sidebar .user-box{
  padding:14px 20px;
  border-top:1px solid rgba(255,255,255,0.08);
  display:flex;
  align-items:center;
  gap:10px;
}
.sidebar .avatar{
  width:34px; height:34px; border-radius:50%;
  background:var(--sky);
  color:var(--navy);
  display:flex; align-items:center; justify-content:center;
  font-weight:700; font-size:0.85rem;
}
.sidebar .user-meta{ line-height:1.25; overflow:hidden; }
.sidebar .user-meta strong{ display:block; font-size:0.85rem; color:#fff; white-space:nowrap; text-overflow:ellipsis; overflow:hidden; }
.sidebar .user-meta span{ font-size:0.75rem; color:#8CA3BE; text-transform:capitalize; }

/* ---------- Konten utama ---------- */
.main-content{
  margin-left:250px;
  flex:1;
  min-width:0;
  display:flex;
  flex-direction:column;
}
.topbar{
  background:var(--surface);
  border-bottom:1px solid var(--border);
  padding:14px 28px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  position:sticky;
  top:0;
  z-index:50;
}
.topbar h1{
  font-size:1.15rem;
  margin:0;
  color:var(--navy);
}
.topbar .breadcrumb{ font-size:0.8rem; color:var(--muted); margin-top:2px; }
.menu-toggle{
  display:none;
  background:none; border:none; font-size:1.3rem; color:var(--navy); cursor:pointer;
}
.logout-link{
  font-size:0.85rem;
  color:var(--danger);
  font-weight:600;
  padding:8px 14px;
  border:1px solid #FCA5A5;
  border-radius:8px;
  transition:background .15s;
}
.logout-link:hover{ background:#FEF2F2; }

.page-body{ padding:28px; flex:1; }

/* =========================================================
   KOMPONEN: CARD, STAT, TABEL, BADGE, FORM, BUTTON
========================================================= */
.card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:22px;
  margin-bottom:22px;
}
.card-title{
  font-size:1rem;
  font-weight:700;
  color:var(--navy);
  margin:0 0 16px;
  display:flex;
  align-items:center;
  justify-content:space-between;
}

.stat-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(200px, 1fr));
  gap:18px;
  margin-bottom:24px;
}
.stat-card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius);
  padding:20px;
  box-shadow:var(--shadow);
  position:relative;
  overflow:hidden;
}
.stat-card::before{
  content:"";
  position:absolute; top:0; left:0; right:0; height:3px;
  background:linear-gradient(90deg, var(--blue), var(--sky));
}
.stat-card .stat-label{ font-size:0.8rem; color:var(--muted); font-weight:500; }
.stat-card .stat-value{ font-size:1.9rem; font-weight:700; color:var(--navy); margin-top:4px; }

.btn{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:9px 16px;
  border-radius:8px;
  font-size:0.87rem;
  font-weight:600;
  border:1px solid transparent;
  cursor:pointer;
  transition:all .15s;
}
.btn-primary{ background:var(--blue); color:#fff; }
.btn-primary:hover{ background:var(--blue-dark); }
.btn-outline{ background:#fff; border-color:var(--border); color:var(--text); }
.btn-outline:hover{ border-color:var(--blue); color:var(--blue); }
.btn-danger{ background:#fff; border-color:#FCA5A5; color:var(--danger); }
.btn-danger:hover{ background:#FEF2F2; }
.btn-sm{ padding:6px 11px; font-size:0.78rem; }

table.data-table{ width:100%; border-collapse:collapse; font-size:0.87rem; }
.data-table th{
  text-align:left;
  background:#F1F5F9;
  color:var(--navy);
  font-weight:700;
  padding:10px 14px;
  border-bottom:2px solid var(--border);
  white-space:nowrap;
}
.data-table td{ padding:10px 14px; border-bottom:1px solid var(--border); vertical-align:middle; }
.data-table tr:hover td{ background:#F8FBFF; }

/* Responsive table: bungkus tabel dengan <div class="table-wrap"> agar bisa scroll horizontal */
.table-wrap{
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  margin-bottom:6px;
}
.table-wrap table.data-table{ min-width:max-content; }

/* Fallback: jika tanpa .table-wrap, tabel tetap bisa scroll */
@media (max-width: 768px){
  table.data-table{
    display:block;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    white-space:nowrap;
  }
  /* Pastikan sel tidak overflow */
  .data-table td, .data-table th{
    white-space:nowrap;
  }
}

.badge{
  display:inline-block;
  padding:3px 10px;
  border-radius:999px;
  font-size:0.72rem;
  font-weight:700;
  text-transform:capitalize;
}
.badge-blue{ background:#DBEAFE; color:#1D4ED8; }
.badge-green{ background:#D1FAE5; color:#047857; }
.badge-yellow{ background:#FEF3C7; color:#B45309; }
.badge-red{ background:#FEE2E2; color:#B91C1C; }
.badge-gray{ background:#F1F5F9; color:#475569; }

.form-group{ margin-bottom:16px; }
.form-group label{ display:block; font-size:0.82rem; font-weight:600; margin-bottom:6px; color:var(--text); }
.form-control{
  width:100%;
  padding:10px 13px;
  border:1px solid var(--border);
  border-radius:8px;
  font-size:0.9rem;
}
.form-control:focus{ border-color:var(--blue); outline:none; box-shadow:0 0 0 3px rgba(37,99,235,0.12); }
textarea.form-control{ resize:vertical; min-height:90px; }
.form-row{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }

.empty-state{
  text-align:center;
  padding:50px 20px;
  color:var(--muted);
}
.empty-state .icon{ font-size:2.2rem; margin-bottom:10px; }

/* =========================================================
   TABLE SEARCH & PAGINATION (tsp)
   ========================================================= */
.table-tsp-wrapper {
    width: 100%;
    overflow-x: auto;
}
.tsp-controls {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
}
.tsp-controls .tsp-search {
    max-width: 280px;
    min-width: 160px;
    flex: 1 1 auto;
}
.tsp-right {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}
.tsp-perpage-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.82rem;
    color: var(--muted);
    white-space: nowrap;
}
.tsp-perpage-label select {
    width: auto;
    min-width: 65px;
    padding: 5px 8px;
    font-size: 0.82rem;
}
.tsp-paginator {
    display: flex;
    align-items: center;
    gap: 4px;
}
.tsp-page {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 34px;
    height: 34px;
    padding: 0 6px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    color: var(--text);
    font-size: 0.82rem;
    font-weight: 600;
    cursor: pointer;
    transition: all .12s;
}
.tsp-page:hover:not(.disabled):not(.active) {
    border-color: var(--blue);
    color: var(--blue);
}
.tsp-page.active {
    background: var(--blue);
    border-color: var(--blue);
    color: #fff;
}
.tsp-page.disabled {
    opacity: 0.4;
    cursor: default;
    pointer-events: none;
}
.tsp-dots {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 24px;
    font-size: 0.85rem;
    color: var(--muted);
    letter-spacing: 2px;
}
.tsp-info {
    font-size: 0.78rem;
    color: var(--muted);
    margin-bottom: 8px;
}
.tsp-hidden {
    display: none !important;
}

/* Responsive: stack search & controls on small screens */
@media (max-width: 600px) {
    .tsp-controls {
        flex-direction: column;
        align-items: stretch;
    }
    .tsp-controls .tsp-search {
        max-width: 100%;
    }
    .tsp-right {
        justify-content: center;
    }
    .tsp-paginator {
        flex-wrap: wrap;
        justify-content: center;
    }
}

/* Tag prinsip pembelajaran mendalam */
.tag-prinsip{
  display:inline-flex;
  align-items:center;
  gap:5px;
  padding:4px 10px;
  border-radius:6px;
  font-size:0.72rem;
  font-weight:600;
  margin-right:6px;
  background:#EFF6FF;
  color:var(--blue-dark);
  border:1px solid #DBEAFE;
}

/* =========================================================
   RESPONSIVE
========================================================= */
@media (max-width: 900px){
  .sidebar{ transform:translateX(-100%); }
  .sidebar.open{ transform:translateX(0); }
  .main-content{ margin-left:0; }
  .menu-toggle{ display:block; }
  .form-row{ grid-template-columns:1fr; }
  .page-body{ padding:18px; }
  .topbar{ padding:12px 16px; }
}

@media (prefers-reduced-motion: reduce){
  *{ transition:none !important; animation:none !important; }
}
