/* ══════════════════════════════════════
   Sistem Presensi Kuliah — style.css
   ══════════════════════════════════════ */

/* ─── CSS Variables (light mode) ─── */
:root {
  --bg-primary:    #ffffff;
  --bg-secondary:  #f5f5f3;
  --bg-tertiary:   #edede9;
  --text-primary:  #1a1a18;
  --text-secondary:#6b6b67;
  --border:        rgba(0, 0, 0, 0.12);
  --border-md:     rgba(0, 0, 0, 0.22);

  --green:         #1D9E75;
  --green-light:   #E1F5EE;
  --green-dark:    #0F6E56;
  --green-darker:  #085041;

  --amber:         #BA7517;
  --amber-light:   #FAEEDA;

  --red:           #A32D2D;
  --red-light:     #FCEBEB;

  --blue:          #185FA5;
  --blue-hover:    #0C447C;
  --blue-light:    #E6F1FB;

  --radius-md:     8px;
  --radius-lg:     12px;
}

/* ─── Dark mode ─── */
@media (prefers-color-scheme: dark) {
  :root {
    --bg-primary:    #1e1e1c;
    --bg-secondary:  #2a2a28;
    --bg-tertiary:   #323230;
    --text-primary:  #f0efea;
    --text-secondary:#9a9a96;
    --border:        rgba(255, 255, 255, 0.10);
    --border-md:     rgba(255, 255, 255, 0.20);

    --green:         #5DCAA5;
    --green-light:   #04342C;
    --green-dark:    #9FE1CB;
    --green-darker:  #E1F5EE;

    --amber:         #EF9F27;
    --amber-light:   #412402;

    --red:           #F09595;
    --red-light:     #501313;

    --blue:          #85B7EB;
    --blue-hover:    #B5D4F4;
    --blue-light:    #042C53;
  }
}

/* ─── Reset ─── */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

/* ─── Base ─── */
body {
  font-family: system-ui, -apple-system, 'Segoe UI', sans-serif;
  font-size: 14px;
  background: var(--bg-tertiary);
  color: var(--text-primary);
  min-height: 100vh;
  line-height: 1.5;
}

/* ─── Layout ─── */
.container {
  max-width: 920px;
  margin: 0 auto;
  padding: 1.5rem 1rem;
}

/* ─── Header ─── */
.header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--bg-primary);
  border: 0.5px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
}

.header h1 {
  font-size: 18px;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 8px;
}

.header-sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 3px;
}

/* ─── Tabs ─── */
.tabs {
  display: flex;
  gap: 4px;
  background: var(--bg-secondary);
  padding: 4px;
  border-radius: var(--radius-md);
  margin-bottom: 1rem;
}

.tab {
  flex: 1;
  padding: 8px 12px;
  border: none;
  background: transparent;
  border-radius: 6px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}

.tab.active {
  background: var(--bg-primary);
  color: var(--text-primary);
  border: 0.5px solid var(--border);
}

/* ─── Sections ─── */
.section       { display: none; }
.section.active { display: block; }

/* ─── Stat Cards ─── */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
  margin-bottom: 1rem;
}

.stat-card {
  background: var(--bg-secondary);
  border-radius: var(--radius-md);
  padding: 12px 14px;
}

.stat-label {
  font-size: 12px;
  color: var(--text-secondary);
  margin-bottom: 4px;
}

.stat-val {
  font-size: 22px;
  font-weight: 500;
}

.stat-val.green { color: var(--green); }
.stat-val.amber { color: var(--amber); }
.stat-val.red   { color: var(--red); }

/* ─── Card ─── */
.card {
  background: var(--bg-primary);
  border: 0.5px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
}

.card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1rem;
  flex-wrap: wrap;
  gap: 8px;
}

.card-header h2 {
  font-size: 15px;
  font-weight: 500;
}

/* ─── Buttons ─── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 14px;
  border: 0.5px solid var(--border-md);
  border-radius: var(--radius-md);
  background: transparent;
  color: var(--text-primary);
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  transition: all 0.15s;
  white-space: nowrap;
}

.btn:hover { background: var(--bg-secondary); }

.btn.primary {
  background: var(--blue);
  color: #fff;
  border-color: var(--blue);
}
.btn.primary:hover { background: var(--blue-hover); }

.btn.success {
  background: var(--green-dark);
  color: #fff;
  border-color: var(--green-dark);
}
.btn.success:hover { background: var(--green-darker); }

.btn.danger {
  color: var(--red);
  border-color: rgba(163, 45, 45, 0.3);
}
.btn.danger:hover { background: var(--red-light); }

.btn.sm {
  padding: 5px 10px;
  font-size: 12px;
}

/* ─── Forms ─── */
.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-bottom: 10px;
}

.form-row.three {
  grid-template-columns: 1fr 1fr 1fr;
}

.field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.field label {
  font-size: 12px;
  color: var(--text-secondary);
}

input[type="text"],
input[type="date"],
select {
  border: 0.5px solid var(--border-md);
  border-radius: var(--radius-md);
  padding: 7px 10px;
  font-size: 13px;
  background: var(--bg-primary);
  color: var(--text-primary);
  width: 100%;
  transition: border-color 0.15s, box-shadow 0.15s;
}

input:focus,
select:focus {
  outline: none;
  border-color: var(--blue);
  box-shadow: 0 0 0 2px rgba(24, 95, 165, 0.15);
}

/* ─── Table ─── */
table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

th {
  text-align: left;
  font-weight: 500;
  color: var(--text-secondary);
  font-size: 12px;
  padding: 8px 10px;
  border-bottom: 0.5px solid var(--border);
  background: var(--bg-secondary);
}

td {
  padding: 9px 10px;
  border-bottom: 0.5px solid var(--border);
}

tr:last-child td { border-bottom: none; }
tr:hover td      { background: var(--bg-secondary); }

.table-scroll { overflow-x: auto; }

/* ─── Attendance list ─── */
.attendance-grid { display: grid; gap: 8px; }

.mhs-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 0.5px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--bg-primary);
  transition: background 0.15s;
}

.mhs-row:hover { background: var(--bg-secondary); }

.avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--blue-light);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 500;
  color: var(--blue);
  flex-shrink: 0;
  user-select: none;
}

.mhs-info { flex: 1; }
.mhs-name { font-weight: 500; font-size: 13px; }
.mhs-nim  { font-size: 11px; color: var(--text-secondary); }

/* ─── Status buttons ─── */
.status-btns { display: flex; gap: 4px; }

.sbtn {
  padding: 5px 10px;
  border-radius: 20px;
  border: 0.5px solid;
  cursor: pointer;
  font-size: 11px;
  font-weight: 500;
  transition: all 0.15s;
  background: transparent;
}

.sbtn.hadir          { border-color: #9FE1CB; color: var(--green-dark); }
.sbtn.hadir.sel      { background: var(--green-light); }
.sbtn.izin           { border-color: #FAC775; color: var(--amber); }
.sbtn.izin.sel       { background: var(--amber-light); }
.sbtn.alpha          { border-color: #F7C1C1; color: var(--red); }
.sbtn.alpha.sel      { background: var(--red-light); }

/* ─── Badge ─── */
.badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 8px;
  border-radius: 20px;
  font-size: 11px;
  font-weight: 500;
}

.badge.hadir { background: var(--green-light); color: var(--green-dark); }
.badge.izin  { background: var(--amber-light); color: var(--amber); }
.badge.alpha { background: var(--red-light);   color: var(--red); }

/* ─── Progress bar ─── */
.percent-bar {
  height: 6px;
  background: var(--bg-secondary);
  border-radius: 3px;
  overflow: hidden;
  margin-top: 4px;
}

.percent-fill {
  height: 100%;
  border-radius: 3px;
  transition: width 0.3s ease;
}

/* ─── Utilities ─── */
.divider {
  border: none;
  border-top: 0.5px solid var(--border);
  margin: 12px 0;
}

.empty {
  text-align: center;
  padding: 2rem;
  color: var(--text-secondary);
  font-size: 13px;
}

.icon-empty {
  font-size: 32px;
  display: block;
  margin-bottom: 8px;
  opacity: 0.4;
}

.search-row {
  display: flex;
  gap: 8px;
  margin-bottom: 1rem;
}

.search-row input { flex: 1; }

.muted-sm {
  font-size: 12px;
  color: var(--text-secondary);
}

.row-gap {
  display: flex;
  gap: 8px;
  align-items: center;
}

.row-gap.wrap { flex-wrap: wrap; }

/* ─── Empty State (presensi tanpa mahasiswa) ─── */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 2.5rem 1rem;
  gap: 10px;
}

.empty-state-icon {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--blue-light);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  color: var(--blue);
  margin-bottom: 4px;
}

.empty-state-title {
  font-size: 15px;
  font-weight: 500;
  color: var(--text-primary);
}

.empty-state-desc {
  font-size: 13px;
  color: var(--text-secondary);
  max-width: 300px;
  line-height: 1.6;
}

/* ─── Ringkasan row ─── */
.ringkasan-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 0.5px solid var(--border);
}

.ringkasan-row:last-child { border-bottom: none; }

.ringkasan-info { flex: 1; }
.ringkasan-name { font-weight: 500; font-size: 13px; }
.ringkasan-nim  { font-size: 11px; color: var(--text-secondary); }

.ringkasan-stat {
  text-align: right;
  font-size: 12px;
}

.ringkasan-pct {
  font-weight: 500;
}

.ringkasan-detail { color: var(--text-secondary); }

/* ─── Toast ─── */
.toast {
  position: fixed;
  bottom: 20px;
  right: 20px;
  background: var(--green-dark);
  color: #fff;
  padding: 10px 16px;
  border-radius: var(--radius-md);
  font-size: 13px;
  font-weight: 500;
  opacity: 0;
  transform: translateY(10px);
  transition: all 0.3s ease;
  pointer-events: none;
  z-index: 999;
}

.toast.show {
  opacity: 1;
  transform: translateY(0);
}

/* ─── Responsive ─── */
@media (max-width: 640px) {
  .stats-grid              { grid-template-columns: repeat(2, 1fr); }
  .form-row,
  .form-row.three          { grid-template-columns: 1fr; }
  .status-btns             { flex-direction: column; gap: 3px; }
  .tab span                { display: none; }
}